سطح مقدماتی (Beginner Level)
توابع لامبدا (Lambda) که به عنوان "توابع ناشناس" نیز شناخته میشوند، روشی کوتاهنویسی شده برای تعریف توابع کوچک و یکخطی در پایتون هستند. برخلاف توابع معمولی که با کلمه کلیدی def تعریف میشوند، لامبداها نیازی به نام ندارند و معمولاً برای عملیاتهای سریع و کوتاه استفاده میشوند.
ساختار و سینتکس (Syntax)
ساختار یک تابع لامبدا بسیار ساده است. این توابع تنها میتوانند یک عبارت (Expression) داشته باشند و نتیجه آن عبارت به صورت خودکار بازگردانده میشود (Return ضمنی).
فرمول کلی:
lambda arguments: expression
# ساختار کلی (Static - صرفاً جهت نمایش سینتکس)
# lambda ورودیها : عملیاتی که باید انجام شود
func = lambda x: x + 1
مثال اول: توابع ریاضی ساده
در این مثال تفاوت تعریف یک تابع معمولی با def و همان تابع با lambda را مشاهده میکنید.
مثال دوم: استفاده بدون نامگذاری
یکی از ویژگیهای اصلی لامبدا این است که نیاز نیست حتماً آن را در یک متغیر ذخیره کنید. میتوانید بلافاصله آن را اجرا کنید (اگرچه این کار در سطح مقدماتی کمتر رایج است).
مثال سوم: لامبدا بدون ورودی
توابع لامبدا میتوانند هیچ ورودیای نداشته باشند و صرفاً یک مقدار ثابت یا نتیجه یک عملیات را برگردانند.
سطح پیشرفته (Professional Level)
در سطح حرفهای، توابع لامبدا به ندرت به تنهایی استفاده میشوند. قدرت اصلی آنها زمانی نمایان میشود که به عنوان آرگومان به توابع سطح بالا (Higher-Order Functions) مانند map، filter، sort و reduce پاس داده میشوند. همچنین درک محدودیتها و استانداردهای PEP8 برای استفاده از آنها ضروری است.
استفاده در توابع Map و Filter
این توابع برای اعمال تغییرات یا فیلتر کردن لیستها بسیار کارآمد هستند و لامبدا کدنویسی آنها را بسیار تمیزتر میکند.
مرتبسازی پیشرفته (Custom Sorting with Key)
یکی از مهمترین کاربردهای لامبدا در پایتون، استفاده به عنوان کلید (key) در تابع sorted() یا متد .sort() برای لیستهایی است که شامل دیکشنری یا تاپل هستند.
شرطهای خطی در لامبدا (Conditional Logic)
شما نمیتوانید از بلوکهای if/else معمولی درون لامبدا استفاده کنید، اما میتوانید از عملگرهای شرطی یکخطی (Ternary Operator) بهره ببرید.
محدودیتها و نکات PEP8
طبق استاندارد PEP8، اگر قرار است یک تابع لامبدا را به یک نام (متغیر) اختصاص دهید، بهتر است از def استفاده کنید. لامبداها برای استفادههای یکبار مصرف طراحی شدهاند.
روش غلط (Not Recommended):
# Static: PEP8 Warning (E731)
f = lambda x: x * 2
روش صحیح (Recommended):
# Static: Use def for named functions
def f(x):
return x * 2
تابع Reduce
تابع reduce از ماژول functools برای تجمیع دادهها استفاده میشود و معمولاً با لامبدا همراه است.