توابع lambda در پایتون: از اصول اولیه تا کاربردهای حرفهای
تابع lambda در پایتون، توابع ناشناسی هستند که برای ایجاد توابع کوچک و درون خطی به کار میروند. این توابع برای سناریوهایی که نیاز به یک قطعه کد کوتاه و یکبار مصرف دارید، بسیار مناسب هستند.
1. ساختار کلی توابع lambda :
ساختار کلی یک تابع lambda به صورت زیر است:
lambda arguments: expression
arguments
: آرگومانهای ورودی به تابع lambda هستند. میتوانید چندین آرگومان را با کاما از هم جدا کنید.expression
: عبارتی است که خروجی تابع را تعیین میکند. این عبارت میتواند هر محاسبه معتبر در پایتون باشد.
2. مثالهای اساسی:
برای درک بهتر، چند مثال از استفادهی ابتدایی توابع lambda ذکر میکنیم:
- دو برابر کردن یک عدد:
double = lambda x: x * 2
result = double(5)
print(result) # خروجی: 10
- محاسبه مساحت مربع:
area_square = lambda side: side * side
square_side = 4
square_area = area_square(square_side)
print(f"مساحت مربع: {square_area}") # خروجی: مساحت مربع: 16
- بررسی زوج بودن عدد:
is_even = lambda num: num % 2 == 0
even_check = is_even(8)
print(f"عده 8 زوج است؟ {even_check}") # خروجی: عده 8 زوج است؟ True
3. قابلیتها و کاربردهای حرفهایتر:
توابع lambda فراتر از مثالهای اولیه کاربرد دارند. در اینجا برخی از ویژگیها و سناریوهای استفادهی حرفهایتر آنها را بررسی میکنیم:
- آرگومانهای پیشفرض:
میتوانید آرگومانهای پیشفرض را برای توابع lambda تعریف کنید تا در صورت عدم ارسال مقدار توسط فراخواننده، از مقادیر پیشفرض استفاده شود.
# تابع محاسبه مساحت با آرگومان پیشفرض برای نوع شکل
calculate_area = lambda side, shape_type="square": side * side if shape_type == "square" else None
square_area = calculate_area(5) # مربع
rectangle_area = calculate_area(5, "rectangle") # مستطیل با ارتفاع 3
print(f"مساحت مربع: {square_area}") # خروجی: مساحت مربع: 25
print(f"مساحت مستطیل: {rectangle_area}") # خروجی: مساحت مستطیل: 15
- بسته شدن (Closure):
توابع lambda میتوانند به متغیرهایی که در محدوده فراخوانی آنها تعریف شدهاند، دسترسی داشته باشند. این رفتار به عنوان بسته شدن (Closure) شناخته میشود.
# ایجاد شمارنده با مقدار اولیه قابل تنظیم
def create_counter(initial_value=0):
count = initial_value
return lambda: count + 1
counter1 = create_counter(5)
counter2 = create_counter(10)
print(counter1()) # خروجی: 6
print(counter1()) # خروجی: 6
print(counter2()) # خروجی: 11
print(counter2()) # خروجی: 11
- استفاده در توابع سطح بالاتر:
توابع lambda را میتوان با توابع سطح بالاتر مانند map , filter , و sorted()
برای انجام عملیات پیچیده روی دادهها به کار گرفت.
# لیستی از اعداد
numbers = [1, 2, 3, 4, 5]
# دو برابر کردن و سپس محاسبه مجذور هر عدد
squared_numbers = list(map(lambda x: (x * 2) ** 2, numbers))
print(squared_numbers) # خروجی: [16, 64, 144, 256, 324]
# فیلتر کردن اعداد اول
prime_numbers = list(filter(lambda x: x > 1