Share on facebook
فیسبوک
Share on twitter
توئیتر
Share on linkedin
لینکدین
Share on telegram
تلگرام
Share on whatsapp
واتساپ

تعریف تابع در پایتون (python) با دستور def

در این آموزش به کامل‌ترین شکل ممکن نحوه تعریف تابع در پایتون (python) رو آموزش میدیم! تابع رو باید با def به معنی define تعریف کنیم! که در این مطلب به طور کامل در موردش توضیح میدیم!

خیلی از وقت‌ها نیازه تا یک‌سری کُد رو در قالب یک تابع بنویسیم و در انواع و اقسام جاهای مختلف کُد خودمون استفاده کنیم!

مثال 1 – تابع بدون پارامتر!

فرض کنید می‌خوایم یک تابع تعریف کنم، که بیاد اسم و فامیل من و وبسایت کولاک رو پرینت کنه! [میدونم تابع جالبی نیست، و با کارایی واقعی تایعی که شما توووی ذهنتون فاصله داره، ولی لحاظ کنید که مثال 1 است! قطعاً جلوتر بهتر میشه!]

قطعه کد زیر رو در نظر بگیرید!:

def copyright():
    print("""
    By: Sajjad Rahmani
    Website: www.Koolac.Org
    My E-Mail: Sajjad.Rahmani.Private@Gmail.Com
    """)

خط 1: اولاً def مخفف define (به معنی تعریف کردن) است! که برای تعریف تابع بکار میره! اسم تابع رو دوست داشتم بذارم copyright! شما می‌تونید اسم تابع رو بذارید Hasan یا هر اسم دیگه!

توجه: تمام خطوط بعدی باید اون فاصله اولیه یا تووو رفتگی رو داشته باشن، تا پایتون (Python) بنده خدا بفهمه منظور ما اینه که خطوط بعدی زیر مجوعه دستور def است! وگرنه بنده‌خدا از کجا میتونه بفهمه؟! خب درکش کنید دیگه!

خط 2: اومدیم یه تابع پرینت استفاده کردیم! برای اینکه چند خطی پرینت کنیم از triple quotation استفاده کردیم!

(هموون “””یه‌چیزی””” منظورم است!)

بعدش وسطش دوتا “””نوشتم: اسمم چیه، آدرس کولاک چیست و آدرس ایمیلم رو وارد کردم! همین!

سوال احتمالی شما

الان ما یه دستور ساده print رو اومدیم توی سه خط نوشتیم؟! اینو پایتون (python) ایراد نمی‌گیره؟! [خیر! شما 10 خط هم که بزنین، باز چیزی نمیگه! پایتون به هر فاصله‌ای حساس نیست! البته به بعضی فاصله‌ها مثل هموون تووورفتگی که بالاتر گفتم، خیلی حساسه!]

مثال از نحوه فراخوانی تابع مثال 1

copyright()

که این میاد، همون چیز میزای بالا رو می‌نویسه! بذارید به این موضوع تاکید کنم که خیلی واضحه که وقتی دارید تابع copyright رو فراخوانی می‌کنید! اصلاً تابعی به اسم copyright تعریف کرده باشید! (مثل اووون‌بنده‌خدای معروف نشه، که حساب بانکی نداشت، بعد دعا میکرد خدایا توووی قرعه‌کشی برنده شم!)

یعنی در اصل کل فضای کد به صورت زیر بوده:

def copyright():
    print("""
    By: Sajjad Rahmani
    Website: www.Koolac.Org
    My E-Mail: Sajjad.Rahmani.Private@Gmail.Com
    """)

copyright()

که خب ما به دلیل محدودیت فضا، و طولانی نشدن متن، فقط همون آخری رو نوشتیم! (چون بقیش رو قبلاً یه بار آوردیم دیگه!)

مثال 2 – به توان 3 رساندن عدد! (تابع با یک ورودی!)

به عنوان مثال، میخوایم یه تابعی بنویسیم که هر عددی که بهش میدیم رو به توان سه برسووونه!

در این صورت کد زیر رو می‌نویسم! [کُد رو نگاه کنید، توضیح میدم در ادامه!]

def Sajjad(x):
    print(x**3)

یه تابع تعریف کردیم به اسم Sajjad! که یه دونه ورودی میگیره! (هر چیزی که توی پرانتز جلوی اسمش میذاریم، بیانگر ورودی است! چون یه دونه چیز گذاشتیم، یعنی یه دونه ورودی میگیره! اگر 500 تا چیز توی پرانتز میذاشتیم! یعنی تابع ما 500 تا ورودی میگیره!)

بعد یه چیز دیگه!: اون x همینجوری گذاشتیم x! (میتونست هر چیز دیگه هم باشه! منظور کلّی‌مووون اینه که یه ورودی میگیره! مثلاً به اسم x! حالا نمی‌تونه اون یه دونه ورودی اسمش a باشه؟! چرا نشه! واضحه که میشه!)

مثلاً تابع y=x+3 رو اگر کسی بنویسه: y=a+3 بهش گیر میدن؟! نه دیگه! چون اسمه! ما هم دوست داشتیم اسم پارامتر رو بذاریم x! یکی دیگه ممکنه حال کنه یه چیز دیگه بذاره!

پس ما به اون ورودی که تابع میگیره، گفتیم x!

حالا داخل تابع میگیم، بیا همون ورودی (یعنی x) رو به توان سه برسووون و چاپش کن! اینم از تابع ما!

مثال از نحوه فراخوانی تابع مثال 2

Sajjad(5)

که خروجی این میشه: 125 !

برای بار دوم و آخر بذارید تاکید کنم، که وقتی تابعی به اسم Sajjad رو دارید تعریف می‌کنید، یعنی قبلش همچین تابعی رو تعریف کردید! یعنی مثلاً کد فضا کد شما بوده:

def Sajjad(x):
    print(x**3)

Sajjad(5)

که خب ما در بالا، برای محدودیت فضا، فقط همون خط آخر رو بهتون نشون دادیم!

استفاده از return برای برگرداندن مقدار خروجی در پایتون (python)!

شاید یکی بگه من دیدم بعضی‌ها این تابع رو این شکلی هم تعریف میکنن:!

def Sajjad(x):
    return x**3

بله کاملاً درسته! return میاد مقدار رو بر می‌گردونه و میده دست ما! اما چاپ نمی‌کنه!

شاید بگید خب اگر چاپ نکنه، خب به چه دردی میخوره؟!

جواب اینه که واقعاً عموماً اتفاقاً لازمه که خروجی به ما داده بشه، نه اینکه چاب بشه! مثلاً فرض کنید می‌خوایم خروجی تابع فوق رو بندازیم توووی یک متغیر و بعد با اون متغیر کار کنیم! خیلی واضحه که دیگه print کردن به دردمون نمی‌خوره! و نیازه که return رو استفاده کنیم! مثلاً همین مثال رو در نظر بگیرید!

def Sajjad(x):
    return x**3
a=Sajjad(2)
print(a)

که خروجی رو میندازه توووی a و بعد میاد چاپش میکنه!

مثال 3 – ضرب دو عدد (تابع با دو پارامتر ورودی!)

این بار دوست داریم یه تابعی بنویسیم که وقتی بهش دوتا عدد می‌دیم، اون ها رو در هم ضرب کنه! و حاصل‌ضرب رو چاپ کنه!

def Rahmani(a,b):
    print(a*b)

اینجا اسم تابع رو گذاشتیم Rahmani ! چون قراره دوتا ورودی بگیره، اومدیم دوتا چیز! داخل پرانتز نوشتیم! حالا ما دوست داشتیم اسم این دوتا چیز رو بذاریم a و b! ممکنه شما دوست داشته باشید اسامی رو بذارید x و y یا هر چیز دیگه! (اسمه دیگه! هرکی یه چیز میذاره!)

ولی خلاصه من، اسم ورودی‌ها رو گذاشتم a و b!

حالا در خط بعد می‌گم: چاپ کن حاصل‌ضرب دو عدد a و b رو! (a و b هم نمایانگر دو عددی هستن که بعداً قراره به این تابع داده بشه!)

مثال از نحوه فراخوانی تابع مثال 3

Rahmani(2,8)

که اگر اینو اجرا کنیم خروجی 16 رو میده!

مثال 4- معادله خط (تابع با 3 پارامتر ورودی!)

فرض کنید می‌خوایم یه تابع برای معادله خط درست کنیم!

اگر یادتون باشه، معادله خط بود: y=ax+b ! (برای یک متغیر البته!)

حالا می‌خوایم یه تابع درست کنیم، که کاربر فقط بهمووون مقادیر a و b و x رو بده! (یعنی شیب خط، عرض از مبدأ خط و مقدار متغیر x!) تا ما بهش بگیم که y چند میشه!

قطعه کد زیر رو در نظر بگیرید!

def khat(x,a,b):
    return a*x+b

اسم تابع رو گذاشتیم khat (خط)! که سه تا ورودی میگیره! ورودی اول مقدار x! ورودی دوم مقدار a (شیب خط) و ورودی سوم مقدار عرض از مبدأ خط! (یعنی b)!

در خط بعدی، هم اومدیم گفتیم، به عنوان خروجی مقدار ax+b رو به ما برگردوونه!

حالا فرض کنید می‌خوایم ببینیم اگر در معادله خط y=2x+4، مقدار x رو 5 بذاریم، y چند میشه! در این صورت داریم:!

w=khat(5,2,4)
print(w)

که در خط اول، خروجی تابع khat رو میندازیم توی متغیر w و بعد در خط بعد هم چاپش می‌کنیم!

نتیجه میشه: 14 !

پس مشخصه که به هرتعداد که بخوایم بخوایم می‌تونیم پارامتر و ورودی در نظر بگیریم!

در نظر گرفتن مقدار پیش فرض برای پارامترهای ورودی تابع

مثال 5

همون مثال 4 رو در نظر بگیرید! حالا فرض کنید می‌خوایم یک قابلیت به تابع خودمون اضافه کنیم که خود تابع به طور پیش‌فرض عرض از مبدأ رو صفر در نظر بگیره! (مگر اینکه کاربر برای عرض از مبدأ یعنی همووون b مقداری رو وارد کنه!) اینجوری وقتی عرض از مبدأ صفره، لازم نیست، برای عرض از مبدا چیزی وارد کنه و کاربر ورودی کمتری وارد میکنه و کمتر خسته میشه!!!!!!! [هرچی علامت تعجب از این مسخری‌بازی‌ها بذارم، کمه! یه عدده دیگه! وارد کنه این کاربر!]

برای اینکار داریم:!

def khat(x,a,b=0):
    return a*x+b

دقت دارید که جلوی ورودی سوم نوشتیم: برابر با 0! یعنی پیش‌فرض اینه که صفره!

حالا اگر یکی وارد کنه:!

a=khat(5,2,4)
print(a)

دیگه چون صراحتاً خود کاربر واسه عرض از مبدأ (یعنی b) مقدار تعیین کرده، دیگه پیش‌فرض رو بی‌خیال میشه! و مشابه مثال 4 جواب میشه 14 !

اما اگر یکی وارد کنه:

a=khat(5,2)
print(a)

چون برای عرض از مبدأ چیزی وارد نکرده، به طور پیش‌فرض 0 در نظر گرفته میشه! و جواب نهایی اجرای کُد میشه 10 !

توجه: یه جورایی انگار ورود پارامتر سوم ورودی (یعنی عرض از مبدأ) اختیاری است! و اگر کاربر حال کرد، وارد میکنه! حال نکرد، به طور پیش‌فرض صفر در نظر میگیریم!

چند نکته!

1- تعداد ورودی‌هایی که به یک تابع می‌دیم باید با تعداد پارامترهای ورودیِ اجباری اون تابع برابر باشه! نه کمتر! نه بیشتر! وگرنه خطا دریافت می‌کنیم!

مثلا در مثال 3 همین مطلب، کد زیر به علت اینکه داریم زیادی ورودی میدیم، خطا میده!

Rahmani(1,2,3)

یا حتی مورد زیر به خاطر کم بودن ورودی خطا میده!

Rahmani(2)

تاکید می‌کنم که اگر تابعی پارامتر اختیاری داشت که خب اختیاریه دیگه!

2- پارامترهایی که قراره به صورت پیش‌فرض براشووون مقدار در نظر بگیریم، باید بعد از پارامترهایی تعریف بشن که براشوون مقدار پیش‌فرض در نظر نمی‌گیریم!

یعنی مثلاً اگر در همون مثال 5، به صورت زیر تابع رو وارد کنیم:

def khat(a,b=0,x):
    return a*x+b

بهمووون خطا میده! خطاش هم به صورت زیر است:

SyntaxError: non-default argument follows default argument

که دقیقاً همون چیزی است که گفتیم! داره با عصبانیت میگه چرا اونایی که مقدار default ندارن رو بعد از اونایی آوردی که مقدار default دارن؟! بعد یکم دعوامون میکنه و میگه دفعه آخرمووون باشه!

Share on facebook
Share on twitter
Share on linkedin
Share on telegram
Share on whatsapp
ارسال دیدگاه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

  1. عاطفه گفت:

    سلام واقعا عالی و مفید توضیح داده بودین خیلی خیلی ممنونم
    براتون آرزوی موفقیت و سلامتی دارم

    • گروه آموزشی کولاک گفت:

      سلام، ممنون از شما که لطف کردید و وقت گذاشتید و نظر دادید
      تشکر از انرژی که به ما میدید
      ممنون

  2. farshad گفت:

    واقعا عالی و مفید و اصلا همه چیز تمووووم.
    واقعا ممنون

    • گروه آموزشی کولاک گفت:

      ممنون از شما
      و انرژی همه چی تمومتون! دمتون گرم که لطف کردید و برامون نظر نوشتید

  3. M.molari گفت:

    با سلام
    منم جزو ادمایی ام که نظر نمیزارن. ولی خیلی جذاب و گیرا توضییح دادین.
    ممنون

    • گروه آموزشی کولاک گفت:

      سلام، خیلی ممنون از شما
      دم شما گرم و دستتون درد نکنه
      مطمئناً برای ما انرژی بخشه واقعاً

  4. Sirwan گفت:

    درود و خسته نباشید
    آموزش هاتون خیلی گویا و صریح و حرفه ایه،
    کار من گرافیک ولی اومدم سمت پایتون و برنامه نویسی اگه لطف بفرمایید یک پروژه هم کارکنید،خیلی خیلی عالی میشم.
    موفق باشید

    • گروه آموزشی کولاک گفت:

      سلام و عرض ادب،
      خیلی خیلی ممنون از لطفتون و ابراز محبتتون
      خیلی انرژی بخشه واقعاً
      امیدوارم موفق باشید
      در مورد پیشنهادتون هم حتماً ان شاء الله
      در چند ماه آینده در برنامه‌هامون هست

  5. Mamad Love گفت:

    منم کم پیش میاد ک نظر بزارم مث اون دوست دیگه و مث اون دوست دیگه پایتون هم بلدم اما بیشتر از 2 ساعته ک دارم تو سایت میچرخم و لذت میبرم فقط یسری جاها مشکل تایپی و کدی داشتی یجا نمدونم کجا تایپ رو tyep نوشته بودی حالا نمدونم کجا بود تو این مطلب نبود این مطلبم اخر ارور رو ی نگاه بنداز ..

    کلا بگم دمت گرم انتظار نداشتم اینقد تو ی سایت چیزایی ک بلدمو بخونم البته یسری چیزام نمدوستم خوب بود یاد گرفتم

    • گروه آموزشی کولاک گفت:

      سلام، خیلی ممنون از شما که بهمون انرژی میدید
      ممنون که وقت گذاشتید و نظر دادید
      اون موردی هم که گفتید، ما در هنگام نوشتن، وارد میکنیم، ولی متاسفانه افزونه بعد از اجرای بعضی از کدها، قرمت نامناسبی را نشان میدهد.
      مثلاً با علامت بزرگتر یا مساوی و … هم همین مشکل رو داره این افزونه متاسفانه
      اما ممنون از شما
      اون موردی که گفتید رو به text ساده تبدیل کردیم و کاملاً مشکل رفع شد.
      بازهم اگر موردی بود، خوشجال میشیم بهمون اطلاع بدید
      ممنون از لطفتون

  6. masoud گفت:

    سلام
    دوست من عالی بود
    من نظر نمیزارم تو هیچ سایتی ولی مطلبتون واقعا عالی بود.

    • گروه آموزشی کولاک گفت:

      سلام بر شما دوست عزیز،
      خیلی ممنون که لطف کردید و وقت گذاشتید و ما رو قابل دونستید و نظر دادید
      یک دنیا ممنون
      امیدوارم در ادامه هم از مطالب ما راضی باشید

  7. atefe behbudi گفت:

    واقعا بی نظیرید جدی میگم

  8. Rioramo گفت:

    سلام مطالبتون بسیار مفید بود

  9. amir گفت:

    میدونستی در زمینه آموزش بی نظیری؟
    من خودم پایتون رو بلدم اما جذب آموزشت شدم و اومدم ببینم مطالب رو چجور آموزش میدی
    که واقعا لذت بردم چون روش آموزشت رو توی هیچ سایت دیگه ای ندیده بودم
    با قدرت بیشتر ادامه بده 🙂
    موفق باشی

    • گروه آموزشی کولاک گفت:

      سلام و عرض ادب،
      خیلی مخلصم
      واقعاً برام خوشحال‌کننده و امیدبخش بود، اینو جدی میگم
      واقعاً ممنون از لطفتون

آموزش کامل پایتون
آموزش کامل پایتون

+ جزوه اختصاصی (به تفکیک فیلم که دیگه نیازی نیست جزوه بنویسید)
+ دارای تمرین

+ مدرس: سجّاد رحمانی

توضیحات بیشتر