آموزش تابع لامبدا در python. توابع لامبدا، که به عنوان توابع بینام نیز شناخته میشوند، روشی مختصر برای تعریف توابع کوچک و تکعبارتی هستند. برخلاف توابع معمولی که با استفاده از def تعریف میشوند، توابع لامبدا نیازی به نام ندارند و معمولاً برای وظایف کوتاهمدت استفاده میشوند.
نحوه نوشتن
نحوه نوشتن یک تابع لامبدا به صورت زیر است:
lambda arguments: expression
lambda: کلیدواژهای برای تعریف تابع لامبدا.
arguments: لیستی از پارامترها که با کاما جدا میشوند (میتواند صفر یا بیشتر باشد).
expression: یک عبارت واحد که ارزیابی شده و مقدار آن برگردانده میشود.
در اینجا یک مثال ساده از تابع لامبدا آورده شده است:
# تابع معمولی def add(x, y): return x + y # معادل تابع لامبدا add_lambda = lambda x, y: x + y # استفاده print(add(3, 5)) # خروجی: 8 print(add_lambda(3, 5)) # خروجی: 8
ویژگیهای توابع لامبدا
تکعبارتی: توابع لامبدا فقط میتوانند شامل یک عبارت باشند؛ هیچ دستوری یا منطق چندخطی مجاز نیست.
بینام: این توابع بینام هستند و معمولاً به یک متغیر اختصاص داده میشوند یا مستقیماً استفاده میشوند.
مقدار بازگشتی: نتیجه عبارت به صورت خودکار بازگردانده میشود (نیازی به استفاده از return نیست).
موارد استفاده رایج
1. استفاده از توابع لامبدا با map()
تابع map() یک تابع را بر روی هر عنصر از یک مجموعه اعمال میکند. توابع لامبدا در اینجا به دلیل اختصار رایج هستند.
numbers = [1, 2, 3, 4] squares = map(lambda x: x**2, numbers) print(list(squares)) # خروجی: [1, 4، 9، 16]
2. استفاده از توابع لامبدا با filter()
تابع filter() عناصر یک مجموعه را بر اساس یک شرط فیلتر میکند.
numbers = [1, 2, 3, 4, 5, 6] evens = filter(lambda x: x % 2 == 0, numbers) print(list(evens)) # خروجی: [2، 4، 6]
3. استفاده از توابع لامبدا با sorted()
تابع sorted() میتواند آرگومان key را برای سفارشیسازی منطق مرتبسازی بپذیرد.
words = ['apple', 'banana', 'cherry', 'date'] sorted_by_length = sorted(words, key=lambda x: len(x)) print(sorted_by_length) # خروجی: ['date', 'apple', 'banana', 'cherry']
4. استفاده درونخطی در توابع
توابع لامبدا اغلب برای وظایف موقتی در داخل توابع بزرگتر استفاده میشوند.
def multiplier(factor): return lambda x: x * factor triple = multiplier(3) print(triple(10)) # خروجی: 30
5. استفاده از توابع لامبدا با reduce()
تابع reduce() از ماژول functools برای انجام یک عملیات تجمعی بر روی مجموعهای از دادهها استفاده میشود.
from functools import reduce numbers = [1, 2, 3, 4] product = reduce(lambda x, y: x * y, numbers) print(product) # خروجی: 24
6. استفاده از توابع لامبدا برای مقایسه
توابع لامبدا میتوانند برای مقایسه و مرتبسازی استفاده شوند.
pairs = [(1, 'one'), (3, 'three'), (2, 'two')] sorted_pairs = sorted(pairs, key=lambda x: x[1]) print(sorted_pairs) # خروجی: [(1, 'one'), (2, 'two'), (3, 'three')]
مقایسه با توابع معمولی:

محدودیتهای توابع لامبدا:
تکعبارتی: توابع لامبدا نمیتوانند شامل چندین دستور یا منطق پیچیده باشند.
بدون توضیحات: آنها از توضیحات (docstring) یا annotations پشتیبانی نمیکنند.
اشکالزدایی: اشکالزدایی دشوارتر است زیرا نام ندارند و کمتر توصیفی هستند.
چه زمانی از توابع لامبدا استفاده کنیم؟
زمانی که به یک تابع کوچک و موقتی نیاز دارید.
برای موارد کوتاهمدت مانند map()، filter() یا sorted().
زمانی که نیاز به تعریف منطق ساده درونخطی برای بهبود اختصار کد دارید.
چه زمانی از توابع لامبدا اجتناب کنیم؟
زمانی که منطق تابع پیچیده است.
زمانی که خوانایی و نگهداری اولویت دارد.
زمانی که نیاز به مستندسازی دقیق یا annotations دارید.
