توابع و ماژول‌ها (بخش اول)

ایجاد شده توسط دکتر مصطفی جلیلی در آموزش برنامه نویسی پایتون 24 فوریه 2025
اشتراک گذاری

توابع یکی از مهم‌ترین ابزارهای برنامه‌نویسی هستند که به ما کمک می‌کنند کدهای قابل استفاده‌ی مجدد بنویسیم، برنامه را خواناتر کنیم و خطایابی را آسان‌تر کنیم. در این فصل، با نحوه‌ی تعریف توابع، توابع بازگشتی (Recursion)، توابع ناشناس (Lambda) و مدیریت آرگومان‌ها (args, kwargs) آشنا می‌شویم.




تعریف توابع (def)


🔹 تابع چیست؟


یک تابع مجموعه‌ای از دستورات است که تحت یک نام خاص تعریف می‌شود و هر زمان که نیاز باشد، می‌توان آن را فراخوانی کرد. توابع باعث کاهش تکرار کد و افزایش خوانایی برنامه می‌شوند.


🔹 نحوه‌ی تعریف تابع در پایتون


در پایتون، توابع با کلمه‌ی کلیدی 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)


🔹 بازگشت (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 چیست؟


توابع 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 داده‌ها را به یک دیکشنری تبدیل می‌کند.

نظرات (0)

اشتراک گذاری

این پست را با دیگران به اشتراک بگذارید

تنظیمات GDPR

When you visit any of our websites, it may store or retrieve information on your browser, mostly in the form of cookies. This information might be about you, your preferences or your device and is mostly used to make the site work as you expect it to. The information does not usually directly identify you, but it can give you a more personalized web experience. Because we respect your right to privacy, you can choose not to allow some types of cookies. Click on the different category headings to find out more and manage your preferences. Please note, that blocking some types of cookies may impact your experience of the site and the services we are able to offer.