توابع lambda در پایتون: از اصول اولیه تا کاربردهای حرفهای
تابع lambda در پایتون، توابع ناشناسی هستند که برای ایجاد توابع کوچک و درون خطی به کار میروند. این توابع برای سناریوهایی که نیاز به یک قطعه کد کوتاه و یکبار مصرف دارید، بسیار مناسب هستند.
۱. ساختار کلی توابع lambda :
ساختار کلی یک تابع lambda به صورت زیر است:
lambda arguments: expression
arguments
: آرگومانهای ورودی به تابع lambda هستند. میتوانید چندین آرگومان را با کاما از هم جدا کنید.expression
: عبارتی است که خروجی تابع را تعیین میکند. این عبارت میتواند هر محاسبه معتبر در پایتون باشد.
۲. مثالهای اساسی:
برای درک بهتر، چند مثال از استفادهی ابتدایی توابع lambda ذکر میکنیم:
- دو برابر کردن یک عدد:
double = lambda x: x * ۲
result = double(۵)
print(result) # خروجی: ۱۰
- محاسبه مساحت مربع:
area_square = lambda side: side * side
square_side = ۴
square_area = area_square(square_side)
print(f"مساحت مربع: {square_area}") # خروجی: مساحت مربع: ۱۶
- بررسی زوج بودن عدد:
is_even = lambda num: num % ۲ == ۰
even_check = is_even(۸)
print(f"عده ۸ زوج است؟ {even_check}") # خروجی: عده ۸ زوج است؟ True
۳. قابلیتها و کاربردهای حرفهایتر:
توابع lambda فراتر از مثالهای اولیه کاربرد دارند. در اینجا برخی از ویژگیها و سناریوهای استفادهی حرفهایتر آنها را بررسی میکنیم:
- آرگومانهای پیشفرض:
میتوانید آرگومانهای پیشفرض را برای توابع lambda تعریف کنید تا در صورت عدم ارسال مقدار توسط فراخواننده، از مقادیر پیشفرض استفاده شود.
# تابع محاسبه مساحت با آرگومان پیشفرض برای نوع شکل
calculate_area = lambda side, shape_type="square": side * side if shape_type == "square" else None
square_area = calculate_area(۵) # مربع
rectangle_area = calculate_area(۵, "rectangle") # مستطیل با ارتفاع ۳
print(f"مساحت مربع: {square_area}") # خروجی: مساحت مربع: ۲۵
print(f"مساحت مستطیل: {rectangle_area}") # خروجی: مساحت مستطیل: ۱۵
- بسته شدن (Closure):
توابع lambda میتوانند به متغیرهایی که در محدوده فراخوانی آنها تعریف شدهاند، دسترسی داشته باشند. این رفتار به عنوان بسته شدن (Closure) شناخته میشود.
# ایجاد شمارنده با مقدار اولیه قابل تنظیم
def create_counter(initial_value=۰):
count = initial_value
return lambda: count + ۱
counter1 = create_counter(۵)
counter2 = create_counter(۱۰)
print(counter1()) # خروجی: ۶
print(counter1()) # خروجی: ۶
print(counter2()) # خروجی: ۱۱
print(counter2()) # خروجی: ۱۱
- استفاده در توابع سطح بالاتر:
توابع lambda را میتوان با توابع سطح بالاتر مانند map , filter , و sorted()
برای انجام عملیات پیچیده روی دادهها به کار گرفت.
# لیستی از اعداد
numbers = [۱, ۲, ۳, ۴, ۵]
# دو برابر کردن و سپس محاسبه مجذور هر عدد
squared_numbers = list(map(lambda x: (x * ۲) ** ۲, numbers))
print(squared_numbers) # خروجی: [۱۶, ۶۴, ۱۴۴, ۲۵۶, ۳۲۴]
# فیلتر کردن اعداد اول
prime_numbers = list(filter(lambda x: x > ۱