در این قسمت تیم کدگیت را با آموزش تابع در پایتون همراهی کنید. ما در این آموزش توابع را معرفی خواهیم کرد همچنین با چرایی استفاده از توابع و نحوه کار با آن‌ها آشنا خواهیم شد. گام بعد مثال‌های متنوعی از این مبحث پیاده سازی خواهیم کرد. اگر تمایل دارید می‌توانید پیش‌نیاز‌های این آموزش را مطالعه نمایید:

تابع در پایتون

توابع یک بلاک از کد هستند که برای انجام کاری خاص پیاده سازی می‌شوند. این بلاک از کد تا زمانی که صدا زده نشود اجرا نخواهد شد. هر تابع یک اسم دارد که با صدا زدن آن، دستورات درون آن اجرا خواهد شد. ایده نوشتن تابع بسیار ساده بوده و برای جلوگیری از کدهای تکراری می باشد. برای اینکه یک کد را چندین بار تکرار نکنیم از توابع استفاده خواهیم کرد. مزایای توابع به صورت خلاصه دو قسمت می شود:

  • جلوگیری از تکرار یک تکه کد
  • افزایش خوانایی کد

تعریف تابع

برای تعریف یک تابع در پایتون از syntax زیر استفاده می‌‎شود:

تابع در پایتون

واژه def در ابتدای تابع قرار می‌گیرد. بعد از آن اسم این تابع (function name) قرار خواهد گرفت. نام تابع توسط برنامه نویس انتخاب می‌شود  و معمولاً از نام‌هایی استفاده می‌گردد که مشخص کننده کار تابع است. به عنوان مثال برای جمع دو عدد از واژه sum استفاده شود که موجب خوانایی بهتر کد می شود. پس سعی کنید در نامگذاری دقت کنید.

بعد از نام تابع پرانتز باز و پرانتز بسته قرار می‌گیرد. درون پرانتز اگر تابع نیاز به ورودی داشته باشد نام ورودی‌ها درون پرانتز قرار خواهد گرفت. بعد از پرانتز : قرار می‌گیرد. از سطر بعد از تعریف تابع می‌بایست دستورات را با فاصله (یک tab) پیاده سازی کنید تا برنامه دچار خطا نشود. در حقیقت این فاصله به معنای جداسازی کدهای درون تابع و بیرون آن است. دستور return در پایان یک تابع قرار می‌گیرد و در صورتی که تابعی خروجی داشته باشد از آن استفاده می شود. به یاد داشته باشید return و ورودی به تابع در صورت نیاز می باشد و اجباری نیست.

ساخت تابع

حال که با syntax و نوشتار تابع در پایتون آشنا شدیم می‌خواهیم یک تابع را تعریف کنیم. این تابع متن welcome to codegate را چاپ خواهد کرد. کد تابع به صورت زیر است:

def print_welcome():

    print ("Welcome to Codegate")

نام تابع print_welcome است. اگر کد بالا را اجرا کنید در خروجی متنی چاپ نخواهد شد. اگر بخواهیم تابعی اجرا شود باید آن را صدا زد. فراخوانی این تابع به صورت زیر است:

def print_welcom():

    print ("Welcome to Codegate")

print_welcome()

برای فراخوانی تابع، نام تابع به همراه پرانتز باز و بسته را می‌نویسیم. به فاصله دستورات دقت کنید که دستور print درون تابع قرار دارد و با یک tab فاصله از ابتدای سطر، نوشته گردیده است. اما دستور print_welcome درون تابع قرار نداشته و بدون فاصله نوشته، گردیده است. خروجی کد بالا به صورت زیر است:

Welcome to Codegate

توابع به همراه ورودی در پایتون

توابع می‌توانند یک یا چندین ورودی را بگیرند. حال می خواهیم تابعی بنویسیم به نام add که در ورودی دو عدد را می گیرد و در خروجی حاصل‌جمع آن‌ها را چاپ می‌کند. به کد زیر دقت کنید:

def add(num1,num2):

    result = num1+num2

    print (result)

add(3,4)

اگر دقت کرده باشید درون پرانتز بعد از نام تابع متغیرهای num1 و num2 را قرار دادیم. این متغیرها در حقیقت ورودیهای تابع هستند. در ادامه متغیر جدیدی به نام result را ایجاد کرده و حاصل جمع num1 و num2 را در آن ریخته‌ایم. هنگام فراخوانی تابع add درون پرانتز دو عدد 3 و 4 را قرار دادیم که ورودیهای تابع هستند. در حقیقت بعد از فراخوانی این تابع، متغیر num1 برابر با 3  و متغیر num2 برابر با 4 خواهد شد. در خروجی نیز عدد 7 چاپ می‌گردد.

خروجی توابع در پایتون

ممکن است توابعی پیاده سازی کنید که نیاز باشد خروجی داشته باشد. به عنوان مثال تابع add که حاصل جمع دو عدد را محاسبه می‌کند، می‌توان حاصل را در خروجی قرار داد و بتوان در بخش‌های دیگر برنامه از آن استفاده کرد. به عنوان مثال، کد زیر را ببینید:

def add(num1,num2):

    result = num1+num2

    return result

add_result = add(3,4)

print(add_result * 2)

در انتهای تابع دستور return قرار دادیم و بعد از آن نام متغیر Result. بعد از return اگر متغیری قرار بگیرد به عنوان خروجی تابع در نظر گرفته می شود. به بخشی که تابع add را صدا زدیم دقت کنید. یک متغیر به نام add_result تعریف کرده‌ایم. این متغیر حاصل خروجی تابع add را در خود ذخیره می‌کند. حاصل خروجی دستور add(3,4) عدد 7 است. پس مقدار متغیر add_result نیز برابر با 7 می‌شود. در پایان در دستور print حاصل‌ضرب این متغیر و عدد دو را محاسبه و چاپ کردیم. خروجی برنامه عدد 14 خواهد بود.

قرارگیری ورودی توابع

مثال زیر را ببینید:

def nameage(name, age):

    print("Hi, I am", name)

    print("My age is ", age)

nameage("Saeed","30")

تابعی با نام nameage نوشته‌ایم که در ورودی نام و سن را می‌گیرد و در خروجی آن‌ها را چاپ می‌کند. خروجی کد بالا به صورت زیر است:

Hi, I am Saeed

My age is  30

حال اگر ورودی این تابع را برعکس بدهیم چه اتفاقی خواهد افتاد؟ کد زیر را ببینید:

nameage("30","Saeed")

خروجی دستور بالا به صورت زیر می‌باشد:

Hi, I am 30

My age is  Saeed

متغیرهای name و age که در ورودی تابع قرار دارد، جابجا شدند. پس می توان این نتیجه را گرفت در پایتون ورودی اول که به تابع می دهیم به متغیر اول نسبت داده می شود ورودی دوم به متغیر دوم و … . اما اگر بخواهیم می توانیم با قرار دادن نام متغیر هنگام صدا زدن تابع، ترتیب را جابجا کنیم. به مثال زیر دقت کنید:

nameage(age="30",name="Saeed")

در کد بالا هنگام فراخوانی تابع، نام متغیر آن را نیز نوشتیم. با این کار مطمئن می شویم مقداری که در ورودی قرار می دهیم به متغیر درستی نسبت می‌شود. خروجی کد بالا به صورت زیر است(مشابه قسمت اول):

Hi, I am Saeed

My age is  30

مقدار پیش‌فرض در ورودی

مواقعی پیش‌خواهد آمد که می‌توان مقداری پیش‌فرض را به ورودی تابع داد و در صورتی که هنگام فراخوانی تابع مقداری قرار نگیرد از مقدار پیش‌فرض استفاده شود. به مثال زیر دقت کنید:

def func(x=50):

    print("x: ", x)

func()

تابعی نوشته‌ایم به نام fun که در ورودی متغیر x را می‌گیرد. متغیر x مقدار پیش‌فرض 50 را دارد و در صورتی که ما هنگام فراخوانی تابع مقداری در ورودی قرار ندهیم مقدار x برابر با 50 خواهد بود. خروجی کد بالا x: 50 است چراکه ما در هنگام صدا زدن تابع func هیچگونه ورودی را قرار ندادیم. کد زیر را ببینید:

def func(x=50):

    print("x: ", x)

func(100)

خروجی کد بالا x: 100 خواهد بود(چرا؟)