تبلیغات

دوره H پایتون – فصل 3 (توابع و ماژول‌ها) – درس 1 (توابع – Functions)

دوره H پایتون
نوشته شده توسط هادی اکبرزاده

دوره H برنامه نویسی پایتون
فصل سوم: توابع و ماژول‌ها در پایتون
درس اول: تابع در پایتون «Functions»


برای شروع فصل سوم و آشنایی با روش استفاده از توابع در پایتون، درصورتی که نمیدانید تابع چیست، ابتدا مقاله‌ی «تابع چیست؟! متد چیست؟!» را مطالعه کنید. سپس در ادامه با فول کده همراه باشید.

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

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

در کد بالا، از تابع print، range و str استفاده شده است. تابع range علاوه بر این که می‌تواند دو ورودی بگیرد، توانایی گرفتن سه ورودی را نیز دارد.

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

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

در مثال زیر، ما تابع my_func را تعریف کرده‌ایم. این تابع ورودی نداشته و روش کار آن به این صورت است که سه بار پیام spam را print می‌کند! همچنین پس از تعریف تابع، آن را در انتهای کد صدا زده‌ایم.

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

>>>
spam
spam
spam
>>>

محل تعریف تابع

توابع باید قبل از اجرا شده تعریف شوند. برای مثال کد زیر با خطا رو به رو خواهد شد:

نتیجه کد بالا:

>>>
NameError: name ‘hello’ is not defined
>>>

ورودی توابع

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

نتیجه کد بالا:

>>>
Welcome!
To!
FuLLKade!
>>>


حالا تابع دیگری با نام print_sum_twice تعریف می‌کنیم که با گرفتن دو ورودی، آن‌ها را باهم جمع می‌کند:

نتیجه کد بالا:


توجه داشته باشید که متغیر تعریف شده به عنوان ورودی یک تابع، از قبیل word و x,y ای که در بالا تعریف کردیم، تنها در داخل بدنه‌ی همان تابع قابل دسترسی می‌باشند و در بیرون از تابع نمی‌توان از آن‌‌ها استفاده کرد. برای مثال کد زیر با خطا رو به رو خواهد شد:

نتیجه کد بالا:

>>>
8

NameError: name ‘variable‘ is not defined
>>>

خروجی یک تابع

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

در مثال زیر، تابع max را با قابلیت داشتن خروجی تعریف کرده‌ایم. به این صورت که این تابع دو عدد از ما گرفته و در خروجی خود، عدد بزرگتر را به ما برمی‌گرداند! و اگرچنانچه ورودی‌ها برابر باشند، یکی از آن دو برمی‌گرداند (که در اینجا ورودی اول را نوشتیم تا برگرداند):

همانطور که می‌بینید، از کلیدواژه‌ی return برای بیرون دادن خروجی استفاده کرده‌ایم. این دستور مقداری را از داخل تابع به بیرون برمی‌گرداند و بدنه‌ی تابع از آن نقطه به بعد دیگر اجرا نخواهد شد. همچنین ما پس از این که تابع max را با ورودی‌های 4 و 7 صدا زدیم، خروجی آن را مستقیم داخل یک print ریخته‌ایم. یا پس از اینکه دوباره همین تابع را با مقادیر 8 و 5 صدا زدیم، خروجی آن را داخل z ریخته و سپس z را پرینت کرده‌ایم! می‌توان اصلا پرینت نکرد و استفاده‌های دیگری از خروجی داشت و یا بعد از انجام عملیاتی روی خروجی، آن را پرینت کرد!

نتیجه کد بالا:

 

>>>
7
8
>>>

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


همانطور که گفته شده، موقع نوشتن return، تابع دیگر متوقف خواهد شد و خروجی را برمی‌گرداند. از آن جهت که مثال بالا این را بهتر نشان نمی‌دهد، یک مثال دیگر می‌زنیم:

در اینجا، ورودی‌های x و y باهم جمع شده و سپس نتیجه‌ی آن برگردانده می‌شود. البته ما می‌توانستیم به جای ریختن x + y داخل یک متغیر دیگر و سپس برگرداندن آن، مستقیم x + y را مقابل return بنویسیم. اما نکته دیگر این است که پس از return، خط سوم که print است اجرا خواهد شد.

نتیجه کد بالا:

>>>
9
>>>

اگرچه در این کد اصلا نباید print را نوشت! چون تحت هیچ شرایطی اجرا نخواهد شد! اما در توابعی که شرطی هستند ممکن است پس از شروطی که داخل آن‌ها return وجود دارد، کدهای دیگری نیز وجود داشته باشند که اگر شروط صحیح نباشند اجرا خواهند شد.


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

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

هادی اکبرزاده

[ مدیر فول کده ]

دانشجوی ارشد شبیه ساز هوشمند و مدیر فول کده

پاسخ دهید

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

نظرات ثبت شده بدون دیدگاه