نوشتن تابع در برنامههای پایتون به شما امکان میدهد قطعه کدی که بیشتر از یکبار در برنامه شما تکرار میشود را به صورت یک تابع تعریف کنید. این کار، باعث میشود کد شما ماژولارتر و خواناتر شود و از تکرار ناخواسته کدها جلوگیری میکند. علاوه بر این، نوشتن تابع برای کارهایی که ممکن است در آینده به آنها نیاز داشته باشید، بسیار مفید است. به طور مثال، فرض کنید میخواهید در یک برنامه پایتون لیستی از اعداد را با هم جمع کنید. میتوانید کد جمع این اعداد را بارها در نقاط مختلف برنامه تکرار کنید. اما اگر یک تابع جمع را تعریف کنید، میتوانید هر زمان که به آن نیاز داشتید آن را فراخوانی کنید و کد تکراری را از بین ببرید. همچنین، تابع نوشتن به شما این امکان را میدهد که قسمتهایی از برنامه خود را جدا کنید و برای بررسی و تست آنها مجزا از برنامه استفاده کنید. به طور کلی، نوشتن تابع در برنامههای پایتون، از جمله مزایایی است که بهبود خوانایی و نگهداری کد، کاهش تکرار کدها و امکان تست و اشکالزدایی برنامه را به دنبال دارد.
در پایتون، میتوانید با استفاده از کلیدواژه def، تابع خود را تعریف کنید. یک تابع معمولاً شامل یک نام، ورودیها، بدنه تابع و یک خروجی است. در ادامه به کمک چند مثال، با نحوه نوشتن تابع در پایتون آشنا خواهید شد.
مثال ۱: تابع تک ورودی و خروجی
در این مثال، یک تابع ساده تعریف میکنیم که یک عدد را به توان دو میرساند و آن را برمیگرداند. شکل 1، نحوه نوشتن تابع را نشان میدهد. در این مثال، تابعی با نام square تعریف کردیم که یک ورودی به نام x دریافت میکند و خروجی آن عدد ورودی به توان ۲ است. سپس با استفاده از تابع square، عدد ۵ را به توان ۲ میرسانیم و خروجی را در متغیر result ذخیره و نمایش میدهیم. مقدار خروجی مقدار 25 ظاهر شده است.
مثال ۲: تابع با چندین ورودی و خروجی
در این مثال، یک تابع را تعریف میکنیم که دو عدد را دریافت کرده و ضرب آنها را برمیگرداند.
در این مثال، تابعی با نام multiply تعریف کردیم که دو ورودی به نام x و y دریافت میکند و خروجی آن ضرب این دو عدد است. سپس با استفاده از تابع multiply، اعداد ۵ و ۶ را به عنوان ورودی به تابع داده و خروجی را در متغیر result ذخیره و نمایش میدهیم. خروجی نهایی که در شکل ۲ نیز نشان داده شده برابر 30 است.
مثال ۳: تابع با پارامتر اختیاری
در بعضی موارد، ممکن است یک تابع برخی از ورودیهایش را به صورت اختیاری دریافت کند. برای این کار، میتوانید پارامترهای تابع را با یک مقدار پیشفرض مقداردهی کنید. به عنوان مثال، تابع greet تعریف کردیم که یک ورودی به نام name به عنوان نام فرد را دریافت میکند. همچنین، یک پارامتر اختیاری به نام greeting نیز داریم که مقدار پیشفرض آن “Hello” است. در این تابع، با استفاده از تابع print، پیامی را به شکل “greeting, name!” نمایش میدهیم. در اولین فراخوانی تابع، مقدار پیشفرض پارامتر greeting، یعنی “Hello”، استفاده میشود. در دومین فراخوانی تابع، مقدار “Hi” به عنوان پارامتر greeting استفاده شده است. شکل ۳ نحوه نوشتن تابع با پارامتر اختیاری و خروجی به دست آمده را نشان میدهد.
مثال ۴: تابع بازگشتی
تابع بازگشتی، یک تابع است که خود را در بدنه تابع فراخوانی میکند. این نوع تابع برای حل مسائلی که تکراری هستند بسیار مفید است. به عنوان مثال، میتوانیم یک تابع بازگشتی برای محاسبه فاکتوریل عدد تعریف کنیم:
در این مثال، تابع factorial تعریف کردیم که یک ورودی به نام n را دریافت میکند. اگر عدد n صفر باشد، خروجی یک است. در غیر این صورت، حاصل ضرب n و فاکتوریل n-1 را برمیگرداند. در نهایت، با استفاده از تابع print، نتیجه محاسبه فاکتوریل ۵ را نمایش میدهیم. همانطور که در شکل 4 مشاهده میکنید مقدار خروجی برابر 120 است.
مثال ۵: تابع با مجموعه پارامترها
در برخی موارد، نیاز است یک تابع تعداد زیادی از ورودیها را دریافت کند اما تعداد آنها میتواند متغیر باشد. برای این کار، میتوانیم از مجموعه پارامترها استفاده کنیم. با استفاده از args* ، تعداد زیادی از ورودیها را دریافت میکنیم که در یک مجموعه به نام args ذخیره میشوند.
در این مثال همانطور که در شکل 5 نشان داده شده است، تابع sum_all تعریف کردیم که تعداد زیادی از ورودیها را با استفاده از args* دریافت میکند. در بدنه تابع، مقدار اولیه result را برابر صفر قرار میدهیم. سپس با استفاده از یک حلقه، تمامی عناصر موجود در args را جمع میکنیم. در نهایت، مقدار حاصل را با استفاده از دستور return برمیگردانیم. در این مثال، با فراخوانی تابع با ورودیهای ۱، ۲، ۳، ۴ و ۵، مجموع این عددها، یعنی ۱۵، محاسبه شده است.
مثال ۶: تابع با مجموعه پارامترهای اختیاری
همانطور که پیشتر گفته شد، در برخی موارد، نیاز است که یک تابع برخی از ورودیها را به طور اختیاری دریافت کند. برای این کار، میتوانیم از مجموعه پارامترهای اختیاری kwargs** استفاده کنیم. با استفاده از kwargs** ، تعداد زیادی از ورودیها را دریافت میکنیم که در یک مجموعه به نام kwargs ذخیره میشوند.
در مثال نشان داده شده در شکل 6، تابع print_dict تعریف کردیم که تعداد زیادی از ورودیها را با استفاده از kwargs** دریافت میکند. در بدنه تابع، با استفاده از یک حلقه، تمامی عناصر موجود در kwargs را چاپ میکنیم. در این مثال، با فراخوانی تابع با ورودیهای name=”Rayan”، age=6 و city=”Tehran”، این عناصر به عنوان یک دیکشنری در kwargs ذخیره میشوند و سپس تمامی عناصر این دیکشنری، یعنی name، age و city، به همراه مقادیرشان، به ترتیب چاپ میشوند.
مثال 7: تابع با مقدار پیشفرض
توابعی که برای برخی از پارامترهایشان، مقدار پیشفرض تعیین میکنیم، توابعی هستند که در صورت عدم وجود آن پارامتر، مقدار پیشفرض مشخص شده را به عنوان ورودی در نظر میگیرند. به عنوان مثال، تابع greet را در نظر بگیرید که در صورت عدم تعیین نام، با مقدار پیشفرض “World” سلامی به کاربران خود میگوید. در مثال شکل 7، تابع greet با یک پارامتر اختیاری، یعنی name، تعریف شده است که در صورت عدم وجود آن، با مقدار پیشفرض “World” فراخوانی میشود. در بدنه تابع، با استفاده از عبارت {f”Hello, {name!”، یک رشته فرمت شده ساخته شده است که شامل پارامتر name است. در نهایت، با فراخوانی تابع greet با ورودی “Rayan”، خروجی “Hello, Rayan!” تولید میشود و با فراخوانی تابع بدون ورودی، خروجی “Hello, World!” تولید میشود.
مثال 8: تابع با بازگشت چندگانه
توابع با بازگشت چندگانه، توابعی هستند که به جای یک مقدار، چندین مقدار را به عنوان خروجی باز میگردانند. به عنوان مثال، تابع divmod را در نظر بگیرید که به صورت ورودی، دو عدد را دریافت میکند و به عنوان خروجی، نتیجه تقسیم و باقیمانده تقسیم را باز میگرداند.
در مثال ذکر شده در شکل 8، تابع divmod با دو پارامتر num1 و num2 تعریف شده است. در بدنه تابع، با استفاده از عملیات تقسیم و باقیمانده، دو مقدار quotient و remainder محاسبه میشود و در نهایت، با استفاده از عبارت return quotient, remainder، این دو مقدار به عنوان خروجی تابع بازگردانده میشوند. با فراخوانی تابع divmod(11, 3)، خروجی (3, 2) تولید میشود که نشاندهنده تقسیم 11 به 3 با باقیمانده 2 است.
دیدگاه ها