Lambda در پایتون چیست؟

Lambda یکی از قابلیت‌های کاربردی زبان پایتون است که به ما اجازه می‌دهد توابع کوتاه و ساده را بدون نوشتن یک تابع کامل با def ایجاد کنیم.

اگر با توابع در پایتون آشنا باشید، یادگیری Lambda برای شما بسیار ساده خواهد بود.

نکته: Lambda بیشتر برای زمانی مناسب است که یک عملیات کوتاه و ساده را فقط در یک عبارت نیاز داشته باشیم.

Lambda در پایتون چیست؟

تابع Lambda یک تابع کوچک و بدون نام است. به همین دلیل به آن گاهی Anonymous Function یا تابع بی‌نام نیز گفته می‌شود.

ساختار کلی Lambda به شکل زیر است:

lambda arguments: expression

در این ساختار:

  • lambda: کلمه کلیدی ایجاد تابع Lambda است.
  • arguments: ورودی‌های تابع هستند.
  • expression: عملیاتی است که تابع انجام می‌دهد.

یک مثال ساده از Lambda

فرض کنید می‌خواهیم عددی را دو برابر کنیم. با تابع معمولی می‌توانیم بنویسیم:

def double(x):
    return x * 2

print(double(5))

خروجی:

10

همین کار را می‌توان با Lambda کوتاه‌تر نوشت:

double = lambda x: x * 2

print(double(5))

خروجی:

10

Lambda با چند آرگومان

یک Lambda می‌تواند چند ورودی داشته باشد. برای مثال، جمع دو عدد:

add = lambda a, b: a + b

print(add(10, 20))

خروجی:

30

Lambda با سه آرگومان

می‌توانیم حتی چند آرگومان را نیز به Lambda ارسال کنیم.

multiply = lambda a, b, c: a * b * c

print(multiply(2, 3, 4))

خروجی:

24

استفاده از Lambda همراه با شرط

می‌توانیم در عبارت Lambda از شرط استفاده کنیم. برای مثال، بررسی کنیم یک عدد زوج است یا فرد.

check = lambda x: "زوج" if x % 2 == 0 else "فرد"

print(check(8))
print(check(7))

خروجی:

زوج
فرد

Lambda و تابع map

یکی از کاربردهای مهم Lambda استفاده از آن همراه با map() است.

تابع map() یک تابع را روی عناصر یک مجموعه اجرا می‌کند.

برای مثال، می‌خواهیم تمام اعداد یک لیست را دو برابر کنیم:

numbers = [1, 2, 3, 4, 5]

result = list(map(lambda x: x * 2, numbers))

print(result)

خروجی:

[2, 4, 6, 8, 10]
نکته: نتیجه map() در پایتون یک شیء map است. با استفاده از list() می‌توانیم نتیجه را به لیست تبدیل کنیم.

Lambda و تابع filter

یکی دیگر از کاربردهای رایج Lambda استفاده همراه با filter() است.

تابع filter() برای انتخاب عناصر بر اساس یک شرط استفاده می‌شود.

برای مثال، فقط اعداد زوج یک لیست را انتخاب می‌کنیم:

numbers = [1, 2, 3, 4, 5, 6]

result = list(filter(lambda x: x % 2 == 0, numbers))

print(result)

خروجی:

[2, 4, 6]

Lambda در مرتب‌سازی لیست

یکی از کاربردهای بسیار مفید Lambda، استفاده از آن برای مرتب‌سازی داده‌ها با sorted() است.

فرض کنید یک لیست از تاپل‌ها داریم:

students = [
    ("Ali", 18),
    ("Sara", 20),
    ("Reza", 16)
]

اگر بخواهیم دانش‌آموزان را بر اساس نمره مرتب کنیم:

students = [
    ("Ali", 18),
    ("Sara", 20),
    ("Reza", 16)
]

result = sorted(students, key=lambda student: student[1])

print(result)

خروجی:

[('Reza', 16), ('Ali', 18), ('Sara', 20)]

تفاوت Lambda و def

هر دو روش برای ساخت تابع استفاده می‌شوند، اما کاربرد آن‌ها یکسان نیست.

  • def: برای ساخت توابع کامل و معمولاً پیچیده‌تر مناسب است.
  • lambda: برای عملیات کوتاه و ساده مناسب است.
  • Lambda معمولاً فقط شامل یک expression است.
  • توابع ساخته‌شده با def می‌توانند چندین خط کد داشته باشند.

چه زمانی از Lambda استفاده کنیم؟

Lambda زمانی کاربرد زیادی دارد که بخواهیم یک عملیات کوتاه را به عنوان یک تابع در اختیار تابع دیگری قرار دهیم.

برای مثال:

  • استفاده همراه با map()
  • استفاده همراه با filter()
  • مرتب‌سازی با sorted()
  • انجام محاسبات ساده

چه زمانی از Lambda استفاده نکنیم؟

اگر یک تابع پیچیده است یا چند مرحله مختلف دارد، بهتر است از def استفاده کنیم.

قاعده ساده: اگر Lambda باعث شود کد سخت‌تر خوانده شود، بهتر است یک تابع معمولی با def بنویسیم.

مثال کاربردی

فرض کنید قیمت چند محصول را داریم و می‌خواهیم 10 درصد به قیمت آن‌ها اضافه کنیم:

prices = [100, 200, 300, 400]

new_prices = list(map(lambda price: price * 1.10, prices))

print(new_prices)

خروجی:

[110.00000000000001, 220.00000000000003, 330.0, 440.00000000000006]

برای نمایش نتیجه با دو رقم اعشار می‌توانیم از round() استفاده کنیم:

prices = [100, 200, 300, 400]

new_prices = list(
    map(lambda price: round(price * 1.10, 2), prices)
)

print(new_prices)

خروجی:

[110.0, 220.0, 330.0, 440.0]

تمرین Lambda در پایتون

تمرین 1:

یک Lambda بنویسید که یک عدد را دریافت کرده و مربع آن را برگرداند.

تمرین 2:

با استفاده از Lambda و map() تمام اعداد زیر را سه برابر کنید:

numbers = [1, 2, 3, 4, 5]

تمرین 3:

با استفاده از Lambda و filter() فقط اعداد بزرگ‌تر از 10 را از لیست زیر انتخاب کنید:

numbers = [5, 12, 8, 20, 3, 15]

تمرین 4:

لیست زیر را بر اساس سن مرتب کنید:

people = [
    ("Ali", 25),
    ("Sara", 20),
    ("Reza", 30)
]

جمع‌بندی

Lambda در پایتون روشی کوتاه برای ساخت توابع ساده و بدون نام است. این توابع معمولاً برای عملیات‌های کوتاه استفاده می‌شوند و در کنار توابعی مانند map()، filter() و sorted() کاربرد زیادی دارند.

اگر تازه شروع به یادگیری پایتون کرده‌اید، ابتدا توابع پایتون و List Comprehension را یاد بگیرید و سپس سراغ Lambda بروید.

مطالب مرتبط

سؤالات متداول

Lambda در پایتون چیست؟

Lambda یک تابع کوتاه و بدون نام است که برای انجام عملیات‌های ساده در پایتون استفاده می‌شود.

تفاوت Lambda و def چیست؟

def برای ساخت توابع معمولی و کامل استفاده می‌شود، در حالی که Lambda بیشتر برای توابع کوتاه و ساده کاربرد دارد.

آیا Lambda می‌تواند چند آرگومان داشته باشد؟

بله. Lambda می‌تواند چند آرگومان دریافت کند، اما بدنه آن معمولاً شامل یک expression است.

Lambda بیشتر در کجا استفاده می‌شود؟

از Lambda می‌توان همراه با توابعی مانند map()، filter() و sorted() استفاده کرد.