توابع لامبدا (Lambda Functions) و کاربردهای آن‌ها

1

توابع لامبدا (Lambda Functions) و کاربردهای آن‌ها

در زبان برنامه‌نویسی پایتون، علاوه بر روش استاندارد و معمول برای ساخت توابع با استفاده از کلمه کلیدی def، روش دیگری نیز برای تعریف توابع کوچک و یک‌خطی وجود دارد. به این توابع، توابع لامبدا (Lambda Functions) یا توابع بی‌نام (Anonymous Functions) گفته می‌شود. در این مقاله از پای شو، به بررسی دقیق ساختار توابع لامبدا و کاربردهای بسیار مهم آن‌ها در پایتون می‌پردازیم.

تابع لامبدا چیست؟

تابع لامبدا یک تابع کوچک و بدون نام است که می‌تواند هر تعداد آرگومان ورودی دریافت کند، اما تنها و تنها یک عبارت (Expression) برای ارزیابی و بازگرداندن خروجی دارد. از آنجایی که این توابع نامی ندارند، معمولاً برای کارهای موقتی و کوتاه که فقط یک بار یا در یک بخش کوچک از کد به آن‌ها نیاز داریم، استفاده می‌شوند.

ساختار کلی توابع لامبدا

برای تعریف یک تابع لامبدا، به جای کلمه def از کلمه کلیدی lambda استفاده می‌کنیم. ساختار کلی آن به شکل زیر است:

Python

lambda arguments: expression
  • lambda: کلمه کلیدی برای تعریف تابع.

  • arguments: ورودی‌ها یا پارامترهای تابع (می‌تواند صفر یا چند پارامتر باشد که با کاما جدا می‌شوند).

  • expression: عبارتی که محاسبه شده و نتیجه آن به عنوان خروجی تابع بازگردانده می‌شود (بدون نیاز به نوشتن کلمه return).

مثال ساده از تابع لامبدا

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

حالت عادی با استفاده از def:

Python

def square(x):
    return x ** 2

همان تابع با استفاده از lambda:

Python

square_lambda = lambda x: x ** 2
print(square_lambda(5)) # خروجی: 25

تفاوت توابع لامبدا با توابع معمولی

۱. نام‌گذاری: توابع معمولی دارای نام هستند، اما لامبداها توابعی بی‌نام محسوب می‌شوند. ۲. بدنه تابع: توابع معمولی می‌توانند شامل چندین خط کد، حلقه‌ها و شروط پیچیده باشند، اما تابع لامبدا تنها به یک خط (یک عبارت) محدود است. ۳. کلمه کلیدی Return: در توابع لامبدا نیازی به نوشتن دستور return نیست و حاصل عبارت به صورت خودکار بازگردانده می‌شود.

کاربردهای مهم توابع لامبدا

قدرت واقعی توابع لامبدا زمانی مشخص می‌شود که آن‌ها را به عنوان ورودی به توابع دیگر (توابع مرتبه بالاتر) پاس بدهیم. در ادامه به سه کاربرد بسیار رایج آن‌ها در پایتون اشاره می‌کنیم:

۱. استفاده همراه با تابع ()map

تابع map یک تابع (مثل لامبدا) و یک لیست را دریافت می‌کند و آن تابع را روی تک‌تک اعضای لیست اعمال می‌کند.

Python

numbers = [1, 2, 3, 4, 5]
# دو برابر کردن تمام اعداد لیست
doubled_numbers = list(map(lambda x: x * 2, numbers))
print(doubled_numbers) # خروجی: [2, 4, 6, 8, 10]

۲. استفاده همراه با تابع ()filter

تابع filter برای فیلتر کردن و جداسازی داده‌های یک لیست بر اساس یک شرط خاص استفاده می‌شود. تابع لامبدا در اینجا نقش همان شرط را بازی می‌کند.

Python

numbers = [10, 15, 20, 25, 30]
# فیلتر کردن اعدادی که بزرگتر از 18 هستند
filtered_numbers = list(filter(lambda x: x > 18, numbers))
print(filtered_numbers) # خروجی: [20, 25, 30]

۳. مرتب‌سازی سفارشی با تابع ()sorted

گاهی اوقات داده‌های پیچیده‌ای (مانند لیستی از دیکشنری‌ها یا تاپل‌ها) داریم و می‌خواهیم آن‌ها را بر اساس یک کلید خاص مرتب کنیم. لامبدا اینجا کار را بسیار ساده می‌کند.

Python

students = [
    ("علی", 15),
    ("سارا", 19),
    ("رضا", 12)
]
# مرتب‌سازی لیست بر اساس نمره (عنصر دوم هر تاپل)
students_sorted = sorted(students, key=lambda student: student[1])
print(students_sorted) 
# خروجی: [('رضا', 12), ('علی', 15), ('سارا', 19)]

چه زمانی از توابع لامبدا استفاده نکنیم؟

با وجود کاربردی بودن توابع لامبدا، استفاده بیش از حد از آن‌ها می‌تواند خوانایی کد (Readability) را کاهش دهد. اگر منطق تابعی که می‌نویسید طولانی است، شامل شروط if/else پیچیده می‌شود یا نیاز به مدیریت خطا (Try/Except) دارد، حتماً از روش استاندارد def استفاده کنید. قانون کلی این است: اگر درک تابع لامبدا بیش از چند ثانیه زمان می‌برد، آن را به یک تابع معمولی تبدیل کنید.

جمع‌بندی

توابع لامبدا در پایتون ابزاری قدرتمند برای نوشتن کدهای کوتاه‌تر و سریع‌تر هستند. همان‌طور که در این مقاله از سایت پای شو بررسی کردیم، این توابع زمانی بهترین عملکرد را دارند که به عنوان آرگومان در کنار توابعی مانند map، filter و sorted قرار بگیرند. با یادگیری و استفاده صحیح از توابع بی‌نام، می‌توانید کدهای پایتونی خود را تمیزتر و حرفه‌ای‌تر بنویسید.

بدون دیدگاه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *