سطح مقدماتی (Beginner Level)
توابع (Functions) یکی از مهمترین مفاهیم در برنامهنویسی هستند. یک تابع، بلوکی از کد است که فقط زمانی اجرا میشود که آن را صدا بزنید (Call). هدف اصلی توابع جلوگیری از تکرار کد (اصل DRY - Don't Repeat Yourself) و سازماندهی بهتر برنامه است.
۱. تعریف و فراخوانی تابع (Defining and Calling)
برای تعریف تابع در پایتون از کلمهی کلیدی def استفاده میکنیم. بدنه تابع باید تورفتگی (Indentation) داشته باشد.
مثال ۱: ساختار کلی (بدون اجرا)
این فقط تعریف یک تابع است. اگر این کد را اجرا کنید، هیچ خروجیای نمیبینید چون تابع صدا زده نشده است.
# Static code (Definition only)
def say_hello():
print("سلام! به دنیای توابع خوش آمدید.")
مثال ۲: تعریف و اجرا
برای اجرای کد داخل تابع، باید نام آن را همراه با پرانتز () بنویسیم.
۲. پارامترها و آرگومانها (Parameters & Arguments)
میتوانیم به توابع داده ورودی بدهیم.
- پارامتر: نام متغیری که در تعریف تابع (
def) میآید. - آرگومان: مقدار واقعی که هنگام صدا زدن تابع ارسال میکنیم.
مثال ۱: تابع با یک ورودی
مثال ۲: تابع با چند ورودی
۳. بازگرداندن مقدار (Return Statement)
توابع میتوانند یک نتیجه را به جایی که صدا زده شدهاند برگردانند. تفاوت print و return بسیار مهم است:
print: فقط نمایش در کنسول (برای کاربر).return: فرستادن مقدار به برنامه (برای استفاده در محاسبات بعدی).
مثال ۱: استفاده از Return
در اینجا تابع محاسبه را انجام میدهد و نتیجه را پس میدهد تا بتوانیم آن را در یک متغیر ذخیره کنیم.
مثال ۲: تفاوت پرینت و ریترن (Static Concept)
# این تابع نتیجه را برمیگرداند (قابل استفاده در متغیر)
def get_sum(a, b):
return a + b
# این تابع فقط چاپ میکند (نتیجهی آن None است)
def print_sum(a, b):
print(a + b)
سطح پیشرفته (Professional Level)
در سطح حرفهای، با قابلیتهای انعطافپذیر توابع در پایتون، مدیریت آرگومانهای پیشرفته و مفهوم Scope آشنا میشویم.
۱. آرگومانهای پیشفرض (Default Arguments)
میتوانید برای پارامترها مقدار اولیه تعیین کنید. اگر کاربر آرگومانی نفرستد، از مقدار پیشفرض استفاده میشود.
مثال ۱: مقدار پیشفرض
نکته مهم: آرگومانهای دارای مقدار پیشفرض همیشه باید بعد از آرگومانهای بدون مقدار پیشفرض بیایند.
۲. آرگومانهای نامحدود (*args و **kwargs)
زمانی که نمیدانید کاربر چند ورودی ارسال میکند، از این دو ساختار استفاده میکنید.
الف) استفاده از *args (تاپل آرگومانها)
این دستور تمام ورودیهای اضافی را به صورت یک Tuple دریافت میکند.
ب) استفاده از **kwargs (دیکشنری آرگومانها)
این دستور ورودیها را به صورت کلید-مقدار (Keyword Arguments) دریافت میکند.
۳. حوزه متغیرها (Scope: Local vs Global)
متغیرهایی که داخل تابع تعریف میشوند Local هستند و بیرون از تابع شناخته نمیشوند. متغیرهای بیرون تابع Global هستند.
مثال ۱: خطای دسترسی به متغیر لوکال
def my_func():
x = 10 # Local variable
print(x)
my_func()
# print(x) # Error: x is not defined
مثال ۲: تغییر متغیر سراسری (Global Keyword)
برای تغییر متغیر بیرونی در داخل تابع، باید از کلمه کلیدی global استفاده کنید (هرچند استفاده زیاد از آن توصیه نمیشود).
۴. توابع ناشناس (Lambda Functions)
توابع لامبدا، توابع کوچک و یکخطی هستند که نام ندارند و معمولاً برای عملیات ساده یا به عنوان ورودی توابع دیگر (مثل map یا filter) استفاده میشوند.
سینتکس: lambda arguments: expression
مثال ۱: لامبدای ساده
مثال ۲: کاربرد عملی (مرتبسازی)
فرض کنید لیستی از تاپلها داریم و میخواهیم بر اساس عنصر دوم مرتب کنیم.
۵. مستندات و Type Hinting (Professional Documentation)
برای نوشتن کد تمیز و خوانا، از Type Hints (مشخص کردن نوع داده) و Docstrings (توضیحات تابع) استفاده میکنیم.
# Static: Professional Definition
def calculate_area(width: float, height: float) -> float:
"""
مساحت مستطیل را محاسبه میکند.
Args:
width (float): عرض مستطیل
height (float): ارتفاع مستطیل
Returns:
float: مساحت محاسبه شده
"""
return width * height