تابع (Function) از مفاهیم بنیادی برنامهنویسی است که کدها را از عباراتی پراکنده به مجموعهای منظم و سازمانیافته تبدیل میکند. با توابع میتوانیم بخشهای مختلف برنامه را ماژولار کرده و بارها از یک قطعه کد واحد استفاده کنیم. توابع در همه زبانها از جمله پایتون باعث کاهش تکرار کدها شده و خوانایی و ساختار برنامه را بهبود میبخشند. برنامههای کوچک و آزمایشی شاید بدون توابع هم اجرا شوند، اما تصور پروژههای بزرگ و پیچیده بدون تابع یک کابوس واقعی است. در این مطلب از کلاسور با انواع توابع در پایتون و نحوه استفاده از آنها در برنامهها آشنا خواهیم شد. تابع مجموعهای از دستورات است که برای انجام کاری خاص در کنار هم قرار گرفتهاند. توابع پایتون را میتوان بارها و بارها فراخوانی کرد، بدون آنکه نیاز به نوشتن مجدد کد باشد. هر تابع میتواند ورودیهایی دریافت کند، عملیاتی روی آنها انجام داده و خروجی مشخصی برگرداند. برای تعریف یک تابع در پایتون کلیدواژه def را بهکار میبریم. این کلمه به مفسر پایتون اعلام میکند: «اینجا قرار است یک تابع تعریف شود!» پس از def اسم تابع خود را انتخاب میکنیم که باید گویای عملکرد آن باشد. برای مثال این تابع دو عدد را دریافت کرده و مجموع آنها را برمیگرداند: در این مثال: (def add_numbers (a,b تابعی به نام add_numbers را با دو ورودی a و b تعریف میکند. return a + b مجموع دو عدد را برمیگرداند. (print(result مقدار بازگشتی را نمایش میدهد. توابع پایتون به دو نوع کلی تقسیم میشود که هر کدام کاربرد خاص خود را دارند. در ادامه با جزئیات بیشتری به بررسی این توابع میپردازیم. پایتون مجموعهای از توابع آماده دارد که بدون نیاز به تعریف خاص، در دسترس هستند. پرکاربردترین توابع از پیش تعریف شده پایتون عبارتاند از: قدرت اصلی پایتون در امکان ساخت توابع سفارشی نهفته است. این توابع که به آنها کاربرساخته میگوییم، به برنامهنویس اجازه میدهند تا منطق خاص خود را پیادهسازی کرده و کارهای منحصربهفردی انجام دهد. مثال ۱: تابعی برای محاسبه مساحت دایره در این مثال: تابع circle_area شعاع دایره را به عنوان مقدار radius دریافت کرده و مساحت دایره را محاسبه میکند. مقدار pi ثابت و برابر ۳.۱۴ در نظر گرفته شده است. مقدار نهایی بازگردانده شده و توسط تابع ()print نمایش داده میشود. مثال ۲: تابعی برای محاسبه مساحت مستطیل در این مثال: calculate_area تابعی است که مساحت مستطیل را محاسبه میکند. دو پارامتر length و width را بهعنوان طول و عرض مستطیل دریافت میکند. تابع پس از محاسبه مساحت، نتیجه را با کلمه کلیدی return برمیگرداند. گاهی نیاز داریم توابعی کوچک و یکخطی تعریف کنیم که تنها یکبار استفاده میشوند. در این موارد توابع ناشناس یا لامبدا به کمک ما میآیند. این توابع نامی ندارند و با استفاده از کلمه کلیدی lambda تعریف میشوند. ساختار کلی تابع ناشناس بدین شکل است: lambda arguments: expression مثال ۱: تابع لامبدا square عدد ورودی را به توان دو میرساند: مثال ۲: تابع لامبدای زیر نام استان مربوط به هر شهر را برمیگرداند: این تابع: یک دیکشنری کوچک از شهرهای ایران و استانهای مربوطه را شامل میشود. اگر شهر در دیکشنری وجود داشته باشد، نام استان را برمیگرداند. اگر شهر ناشناخته باشد، پیام خطا نمایش میدهد. توابع بازگشتی مثل آینههایی تودرتو خودشان را فراخوانی میکنند. این توابع برای حل مسائلی کاربرد دارند که میتوان آنها را به زیرمسائل کوچکتر و مشابه تقسیم کرد؛ مثلا محاسبه فاکتوریل یا دنباله فیبوناچی. مثال ۱: تابع بازگشتی برای محاسبه فاکتوریل یک عدد در این مثال: اگر n برابر 0 باشد، مقدار 1 بازگردانده میشود. در غیر این صورت، n در مقدار فاکتوریل n-1 ضرب شده و تابع دوباره خودش را فراخوانی میکند. مثال ۲: دنباله فیبوناچی با استفاده از تابع بازگشتی در این مثال: اگر ورودی برابر یا کوچکتر از یک باشد، همان ورودی برگردانده میشود. در غیر این صورت مقدار فیبوناچی ورودی محاسبه و نمایش داده میشود. توابع تنها زمانی اجرا میشوند که آنها را فراخوانی کنید.بدین منظور کافی است نام تابع را نوشته و دو پرانتزش جلویش بگذارید: function-name() به همین راحتی! فرض کنید میخواهیم قطعهکدی بنویسیم که نام کاربر را دریافت و به او خوشامد بگوید. بدون توابع این کار نیاز به تکرار مداوم کد خوشآمد دارد. اما با توابع این بخش از کد را یکبار نوشته و هر بار که لازم شد، آن را فقط فراخوانی میکنیم: در پایتون توابع میتوانند دادههایی را بهعنوان ورودی دریافت کنند. این دادهها که به آنها «آرگومان» گفته میشود، در پرانتز بعد از نام تابع قرار میگیرند. توابع مقداری را هم بهعنوان خروجی برمیگردانند که برای دریافتش از کلمه کلیدی return استفاده میشود. در مثال زیر تابع multiply دو مقدار را بهعنوان ورودی دریافت کرده و حاصلضرب آنها را بازمیگرداند. مقدار بازگشتی در متغیر product ذخیره و نمایش داده میشود. آرگومانها مقادیر اولیهای هستند که به تابع میدهیم تا روی آنها کار کند. آرگومان میتواند از پیش تعیینشده باشد، یا در لحظهی فراخوانی تابع به آن مقدار داده شود. در پایتون میتوان برای آرگومانهای تابع مقدار پیشفرض تعیین کرد. در این صورت اگر هنگام فراخوانی تابع مقداری برای آن آرگومان ارسال نشود، پیشفرض در نظر گرفته خواهد شد. در این مثال اگر مقدار آرگومان exponent مشخص نشود، پیشفرض ۲ برای آن در نظر گرفته میشود: هنگام فراخوانی تابع میتوانیم آرگومانها را با نامشان مشخص کنیم. با این روش کدخواناتر شده و ترتیب آرگومانها دیگر اهمیتی نخواهد داشت. در این مثال ترتیب قرارگیری آرگومانها در تابع اهمیتی ندارد، چون مقداردهی بر اساس نام آرگومانها انجام میشود: گاهی اوقات نمیدانیم قرار است چند آرگومان به تابع ارسال کنیم. در این مواقع از *args و **kwargs استفاده میکنیم. *args برای دریافت تعداد نامشخصی آرگومان معمولی و **kwargs برای دریافت تعداد نامشخصی آرگومان کلیدی بهکار میرود. مثال ۱: تابع sum_numbers میتواند هر تعداد عدد را دریافت کرده و مجموع آنها را محاسبه کند: مثال ۲: تابع show_info میتواند تعداد نامحدودی آرگومان کلیدی دریافت کرده و آنها را نمایش دهد: کاربردهای توابع در پروژههای واقعی توابع پایتون را دستکم نگیرید. از کوچکترین برنامهها گرفته تا سامانههای پیچیده بانکی و بازیهای محبوب، همهجا ردپای توابع دیده میشود. خبرهترین برنامهنویسهای دنیا با کنار هم قرار دادن همین قطعات کوچک، بناهایی عظیم و استوار ساختهاند. در ادامه نمونههای برجسته استفاده از تابعهای پایتون را مرور میکنیم. اغراق نیست اگر بگوییم که بدون توابع برنامهنویسی ناممکن میشود. تابع در کدنویسی نقش آجر در معماری را دارد و با روی هم گذاشتن آنها میتوانید هر بنایی برای بسازید. هر گوشه از دنیای فناوری را که بگردید، ردی عمیق از توابع را پیدا میکنید؛ برای مثال: پردازش دادهها: در پروژههایی که با حجم زیادی از دادهها سروکار دارند، توابع برای تمیز کردن، تبدیل و تحلیل دادهها به کار میروند. طراحی وب: در توسعه وب توابع برای مدیریت درخواستهای کاربران، پردازش فرمها و تولید صفحات وب پویا استفاده میشوند. هوش مصنوعی: در این حوزه پیچیده توابع برای پیادهسازی الگوریتمهای یادگیری ماشین و شبکههای عصبی بهکار میروند. چند کد بسیار پرکاربرد دنیای برنامهنویسی که از توابع استفاده میکنند: ۱. خواندن و پردازش دادهها از فایل: ۲. ارسال درخواست به API: ۳. اعتبارسنجی ورودی کاربر: نوشتن توابع خوانا، بهینه و قابل استفاده مجدد سخت نیست و با کمی تمرین روی آن مسلط میشوید. با رعایت همین چند مورد توابعی تمیز و کارآمد خواهید داشت: نامگذاری معنادار: نام تابع باید بهگونهای باشد که عملکرد آن را بهروشنی بیان کند. کوتاه و مختصر: توابع باید وظیفهی مشخصی را انجام دهند و از طولانی شدن بیشازحد آنها باید پرهیز کرد. مستندسازی: نوشتن توضیحات برای توابع، به دیگر برنامهنویسان (و حتی خودتان در آینده) کمک میکند تا عملکرد تابع را بهراحتی درک کنند. تعداد آرگومانها: تعداد آرگومان را تا جای ممکن محدود نگه دارید؛ چون آرگومانهای زیاد دست شما را برای استفاده مجدد از آنها میبندد. توابع قلب تپنده برنامههای پایتون هستند. با تسلط بر این ابزارهای قدرتمند کدهایی مینویسید که نهتنها کارآمد و خوانا باشند، بلکه حرفهای، تمیز و چشمنواز جلوه کنند. در این مطلب شما را با انواع توابع پایتون آشنا کرده و برای هر کدام نمونههایی را مطرح کردیم. حالا وقتش است آستینها را بالا زده و به دنیای شگفتانگیز توابع در پایتون قدم بگذارید. تابع چیست؟ یک بلوک کد سازمانیافته است که برای انجام یک وظیفه خاص طراحی شده است. چرا از تابع در پایتون استفاده کنیم؟ توابع به شما کمک میکنند تا کد خود را ماژولار (بخشبخش) کنید، از تکرار کدها جلوگیری کرده و خوانایی آن را افزایش دهید. تفاوت بین return و print در تابع چیست؟ return مقدار را به جایی که تابع فراخوانی شده بازمیگرداند. print فقط مقدار را در کنسول نمایش میدهد. پارامتر و آرگومان چه تفاوتی دارند؟ پارامتر متغیری است که در تعریف تابع لیست شده اما آرگومان مقداری است که هنگام فراخوانی تابع به آن ارسال میشود. چطور مقدار یک تابع را برگردانیم؟ با استفاده از کلمه کلیدی return میتوانید یک یا چند مقدار را پس از انجام محاسبات از تابع به خروجی برگردانید. تابع لامبدا چیست؟ توابع کوچک، ناشناس و یک خطی هستند که برای مسائل ساده با کلمه کلیدی lambda تعریف میشوند.ساختار کلی یک تابع در پایتون (syntax)
مهمترین تابعهای پایتون
توابع از پیش تعریفشده (مثل print و len)
توابع کاربرساخته (user-defined)
توابع ناشناس (Lambda): معرفی و مثالها تابع زبان برنامهنویسی پایتون
توابع بازگشتی (Recursive Functions): توضیح همراه با مثال
نحوه فراخوانی توابع در پایتون
مثالهایی برای استفاده از توابع
ارسال آرگومانها و استفاده از مقدار بازگشتی (Return Value)
آرگومانها در توابع پایتون
آرگومانهای پیشفرض
آرگومانهای کلیدی (Keyword Arguments)
آرگومانهای دلخواه (*args و **kwargs)
مثالهایی از کاربرد توابع در پروژههای مختلف
بهترین شیوهها برای نوشتن توابع
نتیجهگیری
سوالات متداول