🔹 تابع چیست؟
یک تابع مجموعهای از دستورات است که تحت یک نام خاص تعریف میشود و هر زمان که نیاز باشد، میتوان آن را فراخوانی کرد. توابع باعث کاهش تکرار کد و افزایش خوانایی برنامه میشوند.
🔹 نحوهی تعریف تابع در پایتون
در پایتون، توابع با کلمهی کلیدی def تعریف میشوند.
ساختار کلی:
def function_name():# دستورات داخل تابعreturn مقدار_بازگشتی # (اختیاری)
🔹 مثال: تابعی برای چاپ یک پیام
def greet():
print("سلام! به دنیای پایتون خوش آمدید.")
# فراخوانی تابع
greet()
✅ خروجی:
سلام! به دنیای پایتون خوش آمدید.
🔹 ارسال آرگومان به تابع
تابعها میتوانند ورودی (آرگومان) بپذیرند و مقدار خروجی را بر اساس ورودی محاسبه کنند.
مثال: تابعی که نام کاربر را دریافت کند و پیام خوشآمدگویی نمایش دهد:
def greet_user(name):
print(f"سلام {name}! خوش آمدی.")
greet_user("علی")
greet_user("مریم")
✅ خروجی:
سلام علی! خوش آمدی.
سلام مریم! خوش آمدی.
🔹 مقدار بازگشتی از تابع (return)
برخی توابع مقدار خاصی را محاسبه و بازمیگردانند. برای این کار از return استفاده میکنیم.
مثال: تابعی که مجموع دو عدد را برگرداند:
def add(a, b):
return a + b
result = add(5, 10)
print("مجموع:", result)
✅ خروجی:
مجموع: 15
🔹 بازگشت (Recursion) چیست؟
یک تابع بازگشتی تابعی است که خودش را فراخوانی میکند تا زمانی که به یک شرط پایان برسد. این تکنیک در حل مسائلی مانند محاسبهی فاکتوریل، دنبالهی فیبوناچی، و پیمایش درختها بسیار مفید است.
🔹 مثال: محاسبهی فاکتوریل یک عدد
(فاکتوریل n! برابر است با n × (n-1) × (n-2) × ... × 1)
def factorial(n):
if n == 0 or n == 1: # شرط پایان
return 1
return n * factorial(n - 1) # بازگشت به خود تابع
print(factorial(5)) # خروجی: 120
✅ فرآیند اجرای تابع factorial(5) به این صورت است:
factorial(5) = 5 * factorial(4)
factorial(4) = 4 * factorial(3)
factorial(3) = 3 * factorial(2)
factorial(2) = 2 * factorial(1)
factorial(1) = 1
🔹 مثال: دنبالهی فیبوناچی (Recursive Fibonacci)
(هر عدد در این دنباله برابر است با مجموع دو عدد قبلی: F(n) = F(n-1) + F(n-2))
def fibonacci(n):
if n == 0:
return 0
elif n == 1:
return 1
return fibonacci(n-1) + fibonacci(n-2)
print(fibonacci(6)) # خروجی: 8
⚠ نکته: توابع بازگشتی اگر به درستی کنترل نشوند، میتوانند باعث اجرای بینهایت (infinite loop) و خطای Stack Overflow شوند.
🔹 lambda چیست؟
توابع lambda در پایتون، توابعی کوتاه و ناشناس هستند که بدون استفاده از def تعریف میشوند.
✅ ساختار کلی:
lambda arguments: expression
🔹 مثال: تابع lambda برای جمع دو عدد
add = lambda a, b: a + b
print(add(3, 5)) # خروجی: 8
🔹 استفاده از lambda در sorted()
names = ["محمد", "سارا", "علی", "مهدی"]
names_sorted = sorted(names, key=lambda name: len(name))
print(names_sorted)
✅ این کد لیست names را بر اساس طول نامها به ترتیب صعودی مرتب میکند.
🔹 تفاوت lambda با def
lambda فقط یک خطی است و مناسب برای کارهای کوتاه.def برای توابع چندخطی و پیچیده مناسب است.args و kwargs)🔹 *args - ارسال تعداد نامحدودی آرگومان به تابع
زمانی که نمیدانید چند مقدار ورودی خواهید داشت، از *args استفاده کنید.
مثال: تابعی که تعداد نامحدودی عدد را جمع کند:
def add_numbers(*args):
return sum(args)
print(add_numbers(2, 4, 6, 8)) # خروجی: 20
✅ *args مقدارها را به یک تاپل تبدیل کرده و داخل تابع استفاده میکند.
🔹 kwargs - ارسال تعداد نامحدودی آرگومان کلید-مقدار
زمانی که میخواهید به تابع ورودیهایی با نام مشخص بدهید، از **kwargs استفاده کنید.
مثال: نمایش اطلاعات کاربر با kwargs
def user_info(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
user_info(name="علی", age=25, city="تهران")
✅ خروجی:
name: علی
age: 25
city: تهران
🔹 **kwargs دادهها را به یک دیکشنری تبدیل میکند.