یک تابع در پایتون به چه معناست
توابع در پایتون برای استفاده از کد در بیش از یک مکان از برنامه بکار میروند، و گاهی متد (method) یا رویه (procedure) نیز نامیده میشوند. پایتون توابع داخلی بسیاری از جمله ()print را برای شما گردآوری کرده، اما همچنین این امکان را فراهم ساخته تا توابع دلخواه خود را ایجاد کنید.
نحوه تعریف و فراخوانی یک تابع در پایتون
یک تابع در پایتون با دستور «def» و به دنبال آن نام تابع و یک جفت پرانتز تعریف میشود.
مثال:
اجازه دهید با استفاده از دستور «:()def func1» یک تابع تعریف کرده و آن را فراخوانی کنیم. خروجی تابع برابر است با «I am learning Python functions».
دستور ()print func1 تابع «:()def func1» را فراخوانی کرده و دستور «.I am learning Python function None» را چاپ میکند.
در پایتون برای تعریف یک تابع یک سری قوانین وجود دارد.
- هر گونه آرگومان یا پارامتر باید درون پرانتزها قرار گیرد.
- دستور اول تابع میتواند یک دستور اختیاری باشد، docstring و یا رشته اسناد مربوط به تابع.
- کد درون هر تابع با یک کالن (:) آغاز شده و باید تورفتگی (فضای خالی) داشته باشد.
- دستور return(expression) باعث خروج از تابع شده و میتواند یک مقدار را به فراخواننده تابع برگرداند. یک دستور return بدون آرگومان برابر با دستور return None میباشد.
اهمیت تورفتگی (فضای خالی) در پایتون
پیش از آشنایی با توابع پایتون، مهم است که قانون تورفتگی در اعلان توابع پایتون را به خوبی درک کنیم و بدانیم که این قوانین به دیگر عناصر پایتون همانند اعلان شرطها، حلقهها و متغیرها نیز اعمال میشود.
پایتون سبک خاصی از تورفتگی را برای تعریف کد دنبال میکند، زیرا توابع پایتون از هیچ آغاز و پایان صریحی مانند آکلادها برای مشخص کردن شروع و توقف تابع استفاده نمیکنند، بنابراین تنها بر این تورفتگی ها اتکا دارند. در اینجا مثال ساده دستور «print» را درنظرمیگیریم. وقتی بلافاصله بعد از :()def func1 مینویسیم print ، خطای زیر نمایش داده میشود:
«indentation error: expected an indented block»
حال، اگر در ابتدای دستور print تورفتگی (فضای خالی) اضافه کنیم، باید طبق انتظار متن چاپ شود.
برای اینکه کد شما به درستی کار کند، حداقل یک تورفتگی (کارکتر space) کافی است. اما توصیه میشود حداقل ۳-۴ تورفتگی برای فراخوانی تابع خود قرار دهید.
همچنین ضروری است که هنگام قرار دادن تورفتگی، برای مابقی کد نیز همان اندازه تورفتگی را قرار دهید. برای مثال، در تصویر زیر یک دستور دیگر «Still in func1» را فراخوانی میکنیم و چون دقیقاً زیر دستور اول قرار نمیگیرد یک خطای تورفتگی نمایش داده خواهد شد که:
«unindent does not match any other indentation level»
اکنون،اگر دقیقاً یک اندازه تورفتگی برای دو دستور قرار دهیم و آنها را در یک خط همتراز کنیم، خروجی مورد انتظار بدست خواهد آمد:
یک تابع چگونه مقدار برمیگرداند
دستور «return» در پایتون مشخص میکند که چه مقداری به فراخواننده تابع بازگردانده شود.
اجازه دهید این مطلب را با یک مثال ادامه دهیم.
گام 1) در اینجا مشاهده میکنیم که تابع چیزی برنمیگرداند. برای مثال ما مربع 4 را میخواهیم، و باید پس از اجرای کد پاسخ ۱۶ را دریافت کنیم. این پاسخ را با استفاده از دستور «print x*x» بدست خواهیم آورد، اما با فراخوانی تابع «print square» ، «None» به خروجی داده میشود. این بدین خاطر است که وقتی تابع را فراخوانی میکنید، بازگشت (recursion) اتفاق نیفتاده و سقوط به انتهای تابع رخ میدهد. پایتون مقدار None را در سقوط به انتهای تابع برمیگرداند.
گام 2) برای روشن تر کردن این مسئله دستور print را با دستور تخصیص جایگزین میکنیم. حال اجازه دهید خروجی را بررسی کنیم:
وقتی که دستور«print square(4) » را اجرا میکنید، در واقع مقدار شی بازگردانده میشود و از آنجایی که هیچ تابع مشخصی برای اجرا پس از آن نداریم مقدار None برگردانده میشود.
گام ۳) اکنون، خواهیم دید که چگونه با استفاده از دستور return خروجی را بازیابی میکنیم. وقتی که از تابع return استفاده میکنیم، خروجی ۱۶ بدست خواهد آمد.
گام ۴) توابع در پایتون خودشان شی هستند، و هر شی داری یک مقدار است. خواهیم دید که پایتون چگونه با یک شی برخورد خواهد کرد. وقتی که دستور «print square» را اجرا میکنید، مقدار شی برگردانده میشود. از آنجایی که ما هیچ آرگومانی را نفرستادهایم، هیچ تابع مشخصی برای اجرا مشخص نکرده ایم و بنابراین مقدار پیش فرض (0x021B2D30) که مکان شی است برگردانده میشود. در یک برنامه عملی پایتون، احتمالاً به چنین چیزی هرگز نیاز نخواهید داشت.
آرگومانها در توابع
آرگومان مقداری است که هنگام فراخوانی تابع به آن ارسال میگردد. در واقع این مفهوم هنگام فراخوانی به عنوان آرگومان، و از طرف تابع به عنوان یک پارامتر به حساب میآید.
حال اجازه دهید ببینیم آرگومانها در پایتون چگونه عمل میکنند.
گام 1) آرگومان ها در تعریف تابع اعلان میشوند. همانند شکل زیر، هنگام فراخوانی تابع میتوان مقادیری را به عنوان آرگومان به تابع ارسال کرد.
گام 2) برای اعلان یک مقدار پیش فرض برای یک آرگومان، در تعریف تابع یک مقدار به آن اختصاص دهید.
مثال: x مقدار پیش فرضی ندارد. مقدار پیش فرض y=0 است. اگر هنگام فراخوانی تابع تنها یک آرگومان به آن ارسال کنیم، پایتون آن مقدار را برای x لحاظ کرده و برای y مقدار پیش فرض ۰ را درنظر میگیرد. بنابراین ضرب برابر میشود با x*y=0 .
گام 3) اینبار مقدار y را به جای مقدار پیشفرض به ۲ تغییر میدهیم و خروجی برابر میشود با 8=(4*2).
گام 4) در پایتون همچنین میتوان ترتیب ارسال آرگومانها را نیز تغییر داد. در اینجا ترتیب مقادیر x=4 و y=2 را معکوس کرده ایم.
گام 5) میتوان چند آرگومان را به صورت یک آرایه نیز ارسال کرد. در این مثال ما چند آرگومان (۱،۲،۳،۴،۵) را با فراخوانی تابع (args*) ارسال میکنیم.
مثال: چند آرگومان عددی (۱،۲،۳،۴،۵) را با فراخوانی تابع (args*) اعلان کرده ایم؛ خروجی به صورت (۱،۲،۳،۴،۵) چاپ خواهد شد.
نکات:
- در پایتون ۲.۷، سربارگذاري توابع (function overloading) پشتیبانی نمیشود. سربارگذاري توابع توانایی ایجاد چندین متد با نام یکسان و آرگومانهای متفاوت است.سربارگذاری توابع در پایتون ۳ پشتیبانی میشود.
- توابع و متدها در پایتون به نوعی باهم اشتباه گرفته میشوند. متدها در پایتون مرتبط با نمونه شی (object instance) هستند، حال آن که توابع ارتباطی با آنها ندارند. وقتی پایتون یک متد را فراخوانی میکند، اولین پارامتر آن فراخوانی را به رفرنس شی مناسب متصل میکند. به عبارت ساده تر، یک تابع مستقل در پایتون یک «تابع» است، حال آن که یک متد خاصیتی از یک کلاس یا نمونه شی میباشد.
کد پایتون ۳ در زیر آمده است
#define a function def func1(): print ("I am learning Python function") print ("still in func1") func1() def square(x): return x*x print(square(4)) def multiply(x,y=0): print("value of x=",x) print("value of y=",y) return x*y print(multiply(y=2,x=4))
کد پایتون ۲ در زیر آمده است.
#define a function def func1(): print " I am learning Python function" print " still in func1" func1() def square(x): return x*x print square(4) def multiply(x,y=0): print"value of x=",x print"value of y=",y return x*y print multiply(y=2,x=4)
خلاصه
توابع در پایتون یک تکه کد قابل استفاده مجدد است که برای انجام یک عمل مشخص و مرتبط بهکار میرود. در این مقاله خواهیم دید که:
- توابع با دستور «def» تعریف میشوند.
- بلوک کد درون هر تابع با یک کالن (:) شروع شده و باید تورفتگی داشته باشد.
- هر آرگومان یا پارامتر ورودی باید درون پرانتزها قرار بگیرد.
- حداقل یک تورفتگی (کارکتر فاصله) قبل از اولین دستور پس از اعلان تابع نیاز است.
- بهترین روش استفاده از حداقل ۳ تا ۴ فاصله قبل از دستور میباشد.
- میتوان از دستور «return» برای برگرداندن یک مقدار از تابع استفاده کرد.
- اگر آرگومان به تابع فراخواننده اعمال نشود، پایتون یک مقدار تصادفی مانند (0x021B2D30) را چاپ میکند. مثال «print function».
- در سمت فراخوانی تابع، به اسم آرگومان و از سمت تابع به اسم پارامتر به حساب میآید.
- مقدار پیش فرض آرگومان، هنگامی که تنها یک آرگومان به تابع ارسال میکنیم، پایتون مقدار پیش فرض را به دیگر آرگومانها ارسال میکند.
- پایتون به شما اجازه میدهد تا ترتیب ارسال آرگومانها را نیز تغییر دهید.
منبع: ترجمه از سایت guru99.com
در جلسات بعدی آموزش پایتون با ما همراه باشید. و همچنین اگر علاقمند بودید آموزش زبان ++C را هم مطالعه کنید.
اگر این نوشته برایتان مفید بود لطفا کامنت بنویسید.