آشنایی با توابع در پایتون: انواع، نحوه تعریف و کاربردها
توابع در پایتون به شما این امکان را میدهند که بخشهایی از کد را که چندین بار استفاده میشوند، در قالب یک بلاک تعریف کنید و با یک نام مشخص آن را فراخوانی کنید. این کار باعث کاهش کدهای تکراری، افزایش خوانایی و قابلیت نگهداری بهتر برنامه میشود.
۱. تعریف تابع با def برای ایجاد یک تابع، از کلمه کلیدی def استفاده میکنیم.
ساختار کلی:
def نام_تابع(پارامتر1, پارامتر2, ...):
# بدنه تابع
return مقدار_برگشتی # (اختیاری)
# بدنه تابع
return مقدار_برگشتی # (اختیاری)
اگر return نباشد، تابع مقدار None برمیگرداند.
مثال ساده:
def greet(name):
return f"سلام {name}!"
print(greet("علی"))
return f"سلام {name}!"
print(greet("علی"))
۲. انواع توابع در پایتون
1.2. توابع بدون مقدار بازگشتی (void function) این توابع فقط عملیاتی را انجام میدهند ولی مقدار خاصی برنمیگردانند.
مثال:
def say_hello():
print("سلام!")
say_hello()
print("سلام!")
say_hello()
این تابع فقط پیام "سلام!" را چاپ میکند و مقدار خاصی برنمیگرداند.
۲.۲. توابع با مقدار بازگشتی (return function) این توابع پس از پردازش، یک مقدار را برمیگردانند که میتوان آن را ذخیره یا استفاده کرد.
مثال:
def add(a, b):
return a + b
result = add(5, 3)
print(result) # خروجی: 8
return a + b
result = add(5, 3)
print(result) # خروجی: 8
3.2. توابع با مقدار پیشفرض برای پارامترها میتوان برای پارامترها مقدار پیشفرض تعیین کرد تا در صورت عدم ارسال مقدار، از مقدار پیشفرض استفاده شود.
مثال:
def greet(name="مهمان"):
return f"سلام {name}!"
print(greet()) # خروجی: سلام مهمان!
print(greet("علی")) # خروجی: سلام علی!
return f"سلام {name}!"
print(greet()) # خروجی: سلام مهمان!
print(greet("علی")) # خروجی: سلام علی!
4.2. توابع با تعداد پارامتر نامشخص (*args) اگر بخواهیم تابعی تعداد نامشخصی از پارامترها را بپذیرد، از *args استفاده میکنیم.
مثال:
def sum_all(*numbers):
return sum(numbers)
print(sum_all(1, 2, 3, 4, 5)) # خروجی: 15
return sum(numbers)
print(sum_all(1, 2, 3, 4, 5)) # خروجی: 15
در اینجا، *numbers تمام آرگومانهای ورودی را بهصورت یک tuple دریافت میکند.
5.2. توابع با پارامترهای نامگذاریشده (**kwargs) برای ارسال آرگومانها بهصورت کلید=مقدار و دریافت آنها در قالب dictionary، از **kwargs استفاده میکنیم.
مثال:
def show_info(**info):
for key, value in info.items():
print(f"{key}: {value}")
show_info(name="علی", age=25, city="تهران")
for key, value in info.items():
print(f"{key}: {value}")
show_info(name="علی", age=25, city="تهران")
خروجی:
name: علی
age: 25
city: تهران
age: 25
city: تهران
6.2. توابع بازگشتی (Recursive Functions) توابع بازگشتی، توابعی هستند که خودشان را فراخوانی میکنند.
مثال (محاسبه فاکتوریل عدد):
def factorial(n):
if n == 1:
return 1
return n * factorial(n - 1)
print(factorial(5)) # خروجی: 120
if n == 1:
return 1
return n * factorial(n - 1)
print(factorial(5)) # خروجی: 120
در اینجا، تابع factorial خودش را تا زمانی که n == 1 شود، صدا میزند.
۳. تابعهای lambda (توابع ناشناس یا یکخطی) توابع lambda برای ایجاد توابع ساده و کوتاه بدون نیاز به def استفاده میشوند.
ساختار کلی:
lambda ورودیها: خروجی
مثال:
add = lambda a, b: a + b
print(add(3, 5)) # خروجی: 8
print(add(3, 5)) # خروجی: 8
مثال دیگر:
square = lambda x: x ** 2
print(square(4)) # خروجی: 16
print(square(4)) # خروجی: 16
۴. توابع درون توابع (Nested Functions) میتوان درون یک تابع، تابع دیگری تعریف کرد.
مثال:
def outer_function():
def inner_function():
return "تابع داخلی اجرا شد"
return inner_function()
print(outer_function())
def inner_function():
return "تابع داخلی اجرا شد"
return inner_function()
print(outer_function())
۵. توابع بهعنوان آرگومان در پایتون، توابع را میتوان بهعنوان آرگومان به توابع دیگر ارسال کرد.
مثال:
def apply_function(func, value):
return func(value)
def double(x):
return x * 2
print(apply_function(double, 5)) # خروجی: 10
return func(value)
def double(x):
return x * 2
print(apply_function(double, 5)) # خروجی: 10
۶. توابع با مقدار بازگشتی چندگانه در پایتون، میتوان چند مقدار را از یک تابع بازگرداند.
مثال:
def get_numbers():
return 1, 2, 3
a, b, c = get_numbers()
print(a, b, c) # خروجی: 1 2 3
return 1, 2, 3
a, b, c = get_numbers()
print(a, b, c) # خروجی: 1 2 3
در اینجا، تابع سه مقدار را بهصورت tuple برمیگرداند که در متغیرهای جداگانه ذخیره میشوند.
