مقاله قبلی: ماژول در زبان برنامه نویسی پایتون چیست؟
در این مقاله یاد می گیرید که تابع چیست، چه سینتکسی دارد و از چه اجزایی تشکیل شده است . هم چنین با انواع توابع و نحوه ایجاد یک تابع در پایتون نیز آشنا خواهید شد.
تابع چیست؟
در پایتون هم همانند سایر زبان های برنامه نویسی، تابع به گروهی از جملات و عبارات گفته می شود که تواما کار خاصی را انجام می دهند. استفاده از تابع، برنامه را به قطعات کوچک تر می شکند. هر چه برنامه، بزرگ تر و بزرگ تر شود استفاده از تابع به مدیریت و سازماندهی برنامه کمک شایانی می کند. علاوه بر این تابع، از تکرار کدها جلوگیری می کند و آن ها را قابل استفاده مجدد می کند. شما می توانید داده ای را به عنوان پارامتر به تابع بفرستید، برخی توابع هم می توانند مقداری را به عنوان نتیجه به تابع فراخواننده برگردانند.
برای درک بهتر مفهوم تابع، فرض کنید شما می خواهید برنامه ای بنویسید که به پنج نفر از دوستانتان احوال پرسی شما را نشان دهد. خوب می توانید این برنامه را به صورت زیر بنویسید.
اما آیا این کار خسته کننده و تکراری نیست؟ اگر این طور فکر می کنید پس راه حل شما چیست؟
این جاست که شما به مفهومی تحت عنوان تابع که در اغلب زبان های برنامه نویسی از جمله پایتون وجود دارد نیاز پیدا می کنید. به این صورت که شما تابعی را با نام دلخواه خود تعریف کرده و دستور یا دستورات مورد نظر خود را درون آن می نویسید. حال هر بار که می خواهید آن دستورات اجرا شوند تنها کافیست که آن تابع را با آرگومان های متناسب آن (در صورت وجود) صدا بزنید تا کار مورد نظر شما را انجام دهد. بنابراین اگر بخواهیم همان کار بالا را با تابع انجام دهید به صورت زیر خواهد بود.
ملاحظه می کنید که از حجم کد شما کاسته شده و بر قابلیت خوانایی آن افزوده شده است
انواع توابع
توابع موجود در پایتون را اساسا می توان به دو نوع زیر تقسیم بندی کرد:
توابع توکار: توابعی که از قبل در پایتون تعریف شده اند.
توابع تعریف شده توسط کاربر: توابعی که خود کاربران با توجه به نیازهایشان تعریف می کنند.
سینتکس و نحو یک تابع
یک تابع با کلمه کلیدی def شروع می شود که مخفف کلمه define (به معنای تعریف کردن) است و سپس نام تابع می آید. این نام هم از قوانین نام گذاری شناسه ها در پایتون پیروی می کند. بعد از نام تابع، آرگومان های تابع می آیند. آرگومان ها در واقع همان مقادیری هستند که ما به تابع ارسال می کنیم. پارامترها جزء اختیاری توابع هستند به عبارت دیگر توابع ممکن است پارامتر ورودی داشته باشند یا فاقد پارامتر باشند. شما می توانید هر تعداد پارامتر را که مد نظر دارید به تابع اضافه کنید تنها با این شرط که آن ها را با علامت کاما از هم جدا کنید بنابراین تعداد پارامترها بسته به ماهیت تابع مورد نظر می تواند متغیر باشند. پایان هدر تابع توسط علامت دو نقطه : مشخص می شود.
بخش بعدی، بدنه تابع است که می تواند یک یا چند عبارت معتبر پایتون باشد. اما همه این جملات باید در یک سطح از فرو رفتگی باشند (به یک میزان از شروع خط فاصله داشته باشند) که معمولا به اندازه 4 فاصله خالی است.
بخش نهایی تابع هم که وجود آن اختیاری است عبارت return است. این عبارت برای خاتمه دادن به یک تابع استفاده می شود و مقداری را به تابع فراخواننده بر می گرداند. ضمن این که کنترل اجرای برنامه را نیز به جایی که این تابع صدا زده شده منتقل می کند. عبارتی که در مقابل کلمه return قرار می گیرد می تواند علاوه بر مقدار، یک عبارت محاسباتی نیز باشد که مورد بررسی قرار گرفته و نتیجه آن که یک مقدار است برگردانده می شود.
در قطعه کد بالا، هر بار آرگومان ارسالی به تابع، در عدد 5 ضرب شده و نتیجه به عنوان خروجی تابع my_function(x) ، برگردانده شده و چاپ می شود.
به عنوان مثالی دیگر از برگشت یک مقدار توسط یک تابع، تابع قدر مطلق زیر را ملاحظه کنید. این تابع، یک پارامتر ورودی دارد که در واقع همان عددی است که قرار است قدر مطلق آن را محاسبه کند. اگر این مقدار یک عدد مثبت (مثلا 2) باشد خود آن عدد برگردانده می شود و اگر یک عدد منفی باشد (مثلا 4-) در یک منفی ضرب شده و نتیجه آن که باز یک عدد مثبت خواهد بود برگردانده می شود. بدین ترتیب این تابع به ازای هر ورودی مثبت و منفی، یک عدد مثبت بر می گرداند.
بعد از آن که تابعی را تعریف کردیم می توانیم آن را توسط یک تابع یا برنامه ی دیگر و حتی شل خط فرمان پایتون فراخوانی کنید (صدا بزنید). به عبارت دیگر، تا وقتی که تابعی را صدا نزنیم و فراخوانی نکنیم عملا اتفاقی نمی افتد. حال برای صدا زدن یک تابع تنها کافیست که نام تابع را به همراه آرگومان های مناسب تایپ کنید. در حقیقت این بلوک از کدها تنها زمانی که تابع صدا زده شود اجرا می شوند.
در قطعه کد زیر برای جمع دو مقدار، یک تابع تعریف کرده ایم و هر بار با آرگومان های مختلفی آن را صدا می زنیم و پایتون نیز متناسب با مقادیری که به عنوان آرگومان برایش ارسال کردیم عمل مربوطه را انجام می دهد. مثلا وقتی نمی تواند یک رشته با با یک مقدار صحیح جمع کند خطا می دهد.
تعیین پارامتر پیش فرض برای تابع
اگر تابعی دارای پارامتر پیش فرض باشد و آن را بدون آرگومان ورودی فراخوانی کنیم، تابع از پارامتر پیش فرض خود استفاده خواهد کرد. به مثال زیر توجه کنید:
در قطعه کد بالا، وقتی برای بار سوم تابع را بدون آرگومان ورودی فراخوانی می کنیم در دستور print از پارامتر پیش فرض این تابع که کشور نروژ (Norwey) است استفاده می شود.
زمان حیات و اسکوپ متغیرهای درون یک تابع
پارامترها و متغیرهایی که داخل یک تابع تعریف می شوند در خارج از آن تابع قابل رویت نیستند یعنی دارای اسکوپ محلی هستند و به آن ها متغیرهای محلی گفته می شوند. زمان حیات متغیرهای داخل یک تابع تا زمانیست که آن تابع اجرا می شود. درنتیجه وقتی با کلمه کلیدی return از تابع خارج می شویم حافظه اختصاص داده شده به این متغیرها پس گرفته و نابود می شود. به همین جهت، یک تابع مقدار متغیرهایی که در فراخوانی قبلی اش داشته را به یاد نمی آورد.
در مثال زیر می توانید به وضوح اسکوب متغیرهای داخل یک تابع را ببینید.
در این مثال می بینید که متغیر x ابتدا دارای مقدار 20 است و با آن که در داخل تابع فوق، مقدار این متغیر به 10 تغییر می کند، با این حال وقتی مقدار x را خارج از این تابع پرینت می گیریم می بینیم که همان مقدار اولیه 20 را دارد و تغییری در آن حاصل نشده و این موضوع محلی بودن متغیرهای یک تابع را نشان می دهد. بنابراین این دو متغیر x با این که هم نام هستند اما به دلیل متفاوت بودن اسکوب آن ها، دو متغیر مجزا از هم محسوب می شوند و x داخل تابع یک متغیر محلی و x خارج از تابع، یک متغیر سراسری است.
در این مقاله با تابع چیست؟ انواع توابع، سینتکس و نحو یک تابع، تعیین پارامتر پیش فرض برای تابع، زمان حیات و اسکوپ متغیرهای درون یک تابع آشنا شدید. در مقالات بعدی آموزش زبان برنامه نویسی پایتون با ما همراه باشید.
ترجمه: رقیه آقایاری