جلسه یازدهم دوره پایتون – آشنایی و کار با توابع در پایتون
مقدمه
در جلسه یادزدهم از دوره آموزشی پایتون قصد داریم در مورد موضوع بسیار مهمی به نام توابع اسحرف بزنیم. توابع در زبان پایتون استفاده بسیار زیادی می شوند. در این جلسه برای فهم بهتر سعی شده است که از مثال های زیادی استفاده کنیم. قبل از هر چیز ، مثل سایر جلسات پیشنهاد میکنم جلسات قبل را از لینک های زیر بخوانید:
- جلسه اول دوره پایتون – آشنایی با پایتون و ویژگی های آن
- جلسه دوم دوره پایتون- نصب پایتون
- جلسه سوم دوره پایتون- روش های اجرای برنامه پایتون
- جلسه چهارم دوره پایتون- متغیرها در پایتون
- جلسه پنجم دوره پایتون – بررسی نوع داده های عددی
- جلسه ششم دوره پایتون – رشته ها در پایتون
- جلسه هفتم دوره پایتون – لیست ها
- جلسه هشتم دوره پایتون- Tuple ها
- جلسه نهم دوره پایتون – آشنایی با دستورات شرطی
- جلسه دهم دوره پایتون – آموزش حلقه ها
معرفی تابع و ایجاد آن در پایتون
توابع بخشی از کد هستند که ما میتوانیم از آنها چندین بار استفاده کنیم. یعنی ما یک بار یک تابع را مینویسم و در طول برنامه هر چقدر که دلمان بخواهد میتوانیم از آن استفاده کنیم. یکی دیگر از ویژگی های تابع آن است که به کدهای ما کمک می کند تا ساختار بهتری داشته باشند و خوانایی آنها بالاتر برود.
نحوه ایجاد و تعریف یک تابع:
در پایتون برای ایجاد یک تابع از کلمه کلیدی def استفاده میکنیم. در زیر Syntax مربوط به یک تابع آورده شده است:
def function_name(arg1, arg2, arg3, .... argN): #statement inside function
نکته ای که در اینجا وجود دارد این است که در توابع نیز مانند حلقه ها باید ، دستورات داخل تابع با میزانی تو رفتگی همراه باشد تا زیر مجموعه آن تابع به حساب آورده شود. ( این میزان تو رفتگی باید برای همه دستورات برابر باشد.) یک تابع میتواند یک یا چند پارامتر ( یا آرگومان ) را از ورودی بگیرد. این پارامترها را مطابق Syntax بالا درون پرانتز قرار می دهیم. اجازه دهید برای روشن تر شدن بحث یک مثال را ارایه دهیم:
def sum(start, end): result = 0 for i in range(start, end + 1): result += i print(result) sum(10, 50)
در مثال بالا یک تابع تعریف شده است که این تابع دو پارامتر start و end را در ورودی دریافت می کند و عدد ورودی را در یک حلقه for با تمامی اعداد ما بین عدد ورودی و خروجی جمع می کند. سپس نتیجه در خروجی نشان داده می شود. در این مثال دستور( sum(10 , 50 همان صدا زدن تابع است و 10 در اینجا همان start و 50 همان end می باشد. اگر این کد را اجرا کنیم نتیجه برابر 1230 می شود.
توابعی که دارای خروجی هستند:
در مثال بالا به صورت کامل ساده نتیجه خروجی پرینت می شد. اما اگر بخواهیم نتیجه خروجی را در جایی ذخیره کنیم تا بعدا از آن استفاده کنیم ، در این صورت باید چه کاری انجام دهیم؟ در این جاست که باید از کلمه کلیدی return استفاده کنیم . با استفاده از return نتیجه خروجی را می توان استفاده کرد. این نتیجه خروجی به خطی که تابع صدا زده شده است برمیگردد و میتوان با استفاده از مساوی قرار دادن یک متغیر با آن تابع مقدار خروجی تابع را در آن متغیر ریخت و از آن استفاده کرد. مثال زیر در مورد استفاده از یک تابع همراه با مقدار بازگشتی است:
def sum(start, end): result = 0 for i in range(start, end + 1): result += i return result s = sum(10, 50) print(s)
در بالا نتیجه خروجی برابر با متغیر s قرار داده شده است و مشابه مثال قبل ، در اینجا نیز خروجی برابر 1230 می باشد.
البته میتوان از return استفاده کرد ، بدون آن که مقداری را در خروجی قرار داد. مثال زیر را ببینید:
def sum(start, end): if(start > end): print("start should be less than end") return # here we are not returning any value so a special value None is returned result = 0 for i in range(start, end + 1): result += i return result s = sum(110, 50) print(s)
در مثال بالا اگر مقدار start از end کمتر بود ، در این حالت یک پیغام بر روی خروجی چاپ می شود و از تابع خارج می شویم. در غیر این صورت مشابه قبل عملیات جمع انجام می شود.
اگر کد بالا را اجرا کنیم نتیجه به صورت زیر خواهد بود:
start should be less than end None
در مثال بالا چون عدد 110 که start است ، از عدد 50 که end است ، بیشتر می باشد ، پیغام مربوطه بر روی خروجی چاپ می شود و از تابع خارج می شود. سپس مقدار return شده نمایش داده می شود. توجه داشته باشید که اگر در پایتون خروجی یک تابع صریح و مشخص نباشد ، در این صورت مقدار None مربوطه قرار می گیرد. به همین دلیل در این جا مقدار s برابر None شده است. برای این که این مفهوم را بهتر درک کنیم به مثال زیر توجه کنید:
def test(): # test function with only one statement i = 100 print(test())
اگر این کد را اجرا کنیم ، نتیجه خروجی به صورت زیر خواهد بود :
None
در مثال بالا چون تابع test مقدار مشخصی را بر نمی گرداند ، به همین خاطر مقدار None برگشت داده می شود.
آشنایی با متغیرهای عمومی و خصوصی
اگر قبلا با زبان C کار کرده باشید احتمالا با متغیرهای سراسری(Global Variable) و محلی (Local Variable ) آَشنا شده اید. در اینجا نیز منظور از متغیرها عمومی و خصوصی همان متغیرها هستند. ولی چون این کلمات کمی برای ما جا افتاده تر هستند ، سعی کرده ایم به جای محلی و سراسری از نام عمومی و خصوصی استفاده کنیم. در زیر به تعریف این دو نوع متغیر پرداخته ایم:
متغیرهای عمومی: این متغیرها ، متغیرهایی هستند که میتوان از آن ها در همه جای برنامه استفاده کرد. از این متغیرها چه در داخل توابع و چه در خارج از توابع میتوانیم استفاده کنیم.
متغیرهای خصوصی: متغیرهایی که در داخل توابع تعریف می شوند و فقط میتوان از آن ها در همان تابع استفاده کرد و از آنها نمیتوان در جای دیگری از برنامه استفاده کرد را متغیرهای خصوصی می نامند.
برای درک بهتر این بحث به چند مثال زیر توجه کنید:
مثال 1:
global_var = 12 # a global variable def func(): local_var = 100 # this is local variable print(global_var) # you can access global variables in side function func() # calling function func() #print(local_var) # you can't access local_var outside the function, be
اگر این کد را اجرا کنیم عدد 12 بر روی خروجی برای ما نشان داده می شود.
در مثال بالا متغیری که در ابتدای برنامه تعریف شده است یک متغیر عمومی است در حالی که متغیری با نام local_var یک متغیر خصوصی است.
مثال 2 :
xy = 100 def cool(): xy = 200 # xy inside the function is totally different from xy outside the function print(xy) # this will print local xy variable i.e 200 cool() print(xy) # this will print global xy variable i.e 100
نتیجه اجرای کد بالا به صورت زیر است:
200 100
در کد بالا در مرحله اول که تابع صدا زده می شود ، مقدار xy برابر با 200 نشان داده می شود. این xy که نشان داده می شود یک متغیر خصوصی است. پس از پایان تابع مقدار xy که یک متغیر عمومی است نشان داده می شود. این متغیر عمومی مقداری برابر با 100 دارد و مقدار آن با مقدار xy متغیر خصوصی کاملا متفاوت است. به همین دلیل پس از اجرای این خط مقدار 100 نشان داده می شود.
با استفاده از کلمه کلیدی global ما میتوانیم متغیرهای عمومی که در برنامه تعریف شده اند را دقیقا به همان صورت عمومی در توابع خود مورد استفاده قرار دهیم. مثال زیر را ببینید:
t = 1 def increment(): global t # now t inside the function is same as t outside the function t = t + 1 print(t) # Displays 2 increment() print(t) # Displays 2
در نتیجه اجرای این کد خروجی به صورت زیر خواهد بود:
2 2
یکی از نکاتی که در این جا گفتن آن خالی از لطف نیست این است که هنگامی که در یک تابع با کلمه کلیدی global یک متغیر تعریف می کنید ، نمیتوانید آن را مقدار دهی کنید. مثلا اگر در داخل یک تابع بنویسیم global t = 1 ، در این صورت با خطا مواجه خواهیم شد.
مقدار پیش فرض دادن به ورودی های یک تابع
برای این که ورودی های یک تابع رو با مقداری مشخص ، معین کنید کافی است تا در همان هنگام تعریف تابع ، مقدار مورد نظر را برابر با پارامتر ورودی قرار دهیم. مثال زیر را ببینید:
def func(i, j = 100): print(i, j)
تابع بالا دو ورودی دارد که ورودی دوم با مقدار 100 مقدار دهی شده است. این به این معنی است که ما میتوانیم پارامتر دوم تابع func را هنگام صدا زدن اصلا وارد نکنیم. مثل :
func(2) # here no value is passed to j, so default value will be used
نتیجه اجرای خط بالا و تابع مورد نظر به صورت زیر خواهد بود :
2 100
return کردن چند مقدار در یک تابع
در یک تابع ممکن است ما بخواهیم چند مقدار را return کنیم. در این صورت کافی است ، عباراتی که قصد return کردن آن را داریم با کاما از یکدیگر جدا کنیم. عبارات return شده به صورت tuple برگشت داده می شوند. مثال زیر را در نظر بگیرید:
def bigger(a, b): if a > b: return a, b else: return b, a s = bigger(12, 100) print(s) print(type(s))
اگر این کد را اجرا کنیم نتیجه آن به صورت زیر خواهد بود :
(100, 12) <class 'tuple'>
خوب دوستان. برای این جلسه هم کافی است. مثل همیشه میتوانید ما را در تلگرام و یا اینستاگرام دنبال کنید:
2 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
سلام این دوره کامل نیست؟
با سلام.
این دوره هنوز به صورت کامل قرار داده نشده است و جلسات آن به صورت هفته به هفته در حال انتشار می باشد.
موفق باشید.