منظور از لامبدا در پایتون: تابع لامبدا پایتون به زبان ساده

فهرست مطالب این نوشته
Toggleکسانی که با پایتون آشناییت دارند، به احتمال زیاد با چنین کدی روبرو شدهاند: lambda x: x + 1
ولی اینجا دقیقاً چه اتفاقی افتاده است؟ این lambda چه معنایی دارد؟ چرا از def استفاده نشده است؟ مگر این یک تابع نیست؟ در این مطلب میخواهیم منظور از لامبدا در پایتون را بررسی کنیم و به این موضوع بپردازیم که چرا به آن تابع بینام گفته میشود.

لامبدا چیست؟ تابعی کوچک اما کاربردی
تابع لامبدا در پایتون یک نوع خاص از توابع است که برای انجام عملیاتهای ساده و کوتاه طراحی شده است. برخلاف توابع معمولی که با def تعریف میشوند و میتوانند چندین خط کد داشته باشند، توابع لامبدا همیشه یکخطی هستند و فقط یک عبارت (expression) دارند.
ساختار آن بسیار جمع و جور است:
- پارامترها: عبارت lambda
برای مثال اگر بخواهید عددی را دو برابر کنید، میتوانید بنویسید:
double = lambda x: x * 2
print(double(5)) # خروجی: 10
به وسیله کد بالا در همان لحظه یک تابع ساختهاید، بدون آنکه نیازی باشد برای آن ساختار مفصل یا نامگذاری خاصی انجام بدهید.
چرا تابع لامبدا در پایتون وجود دارد؟
شاید از خودتان بپرسید: چرا Lambda در پایتون وجود دارد؟
تابع لامبدا به این دلیل در پایتون وجود دارد که بتوانید بهسرعت و در همان لحظه توابعی کوتاه و یکبار مصرف تعریف کنید.
تصور کنید قصد دارید فقط یک بار یک تابع کوچک را، مثلاً در داخل filter() یا map()، استفاده کنید. آیا واقعاً لازم است برای آن یک تابع کامل با def تعریف شود؟ خیر. اینجا است که میتوانید با لامبدا سادهتر و تمیزتر کار کنید.
بررسی چند مثال برای درک بهتر لامبدا
در این قسمت چندین مثال آوردهایم تا منظور از لامبدا در پایتون را بهتر متوجه شوید.
۱. فیلتر کردن مقادیر
فرض کنید یک لیست از عددها دارید و میخواهید فقط آنهایی را نگه دارید که بزرگتر از ۱۰ هستند:
numbers = [33, 3, 22, 2, 11, 1]
filtered = list(filter(lambda x: x > 10, numbers))
print(filtered) # خروجی: [33, 22, 11]
۲. اعمال عملیات روی همه عناصر لیست
برای مثال در کدهای زیر، با استفاده از map و یک تابع لامبدا، همه اعداد را به توان دو رساندهایم:
numbers = [1, 2, 3]
squared = list(map(lambda x: x ** 2, numbers))
print(squared) # خروجی: [1, 4, 9]
۳. محاسبه تجمعی با reduce
from functools import reduce
total = reduce(lambda x, y: x + y, [1, 2, 3, 4])
print(total) # خروجی: 10
در این مثال reduce عناصر لیست را با تابع جمع ترکیب میکند تا در نهایت مجموع آنها را به دست بیاورد.
۴. استفاده در کتابخانه Pandas
کار با دادهها با Pandas انجام میشود، و لامبدا اینجا هم کاربرد خودش را دارد:
import pandas as pd
df = pd.DataFrame({‘col1’: [1, 2, 3]})
df[‘col2’] = df[‘col1’].map(lambda x: x * 10)
print(df)
۵. مرتبسازی سفارشی با لامبدا
به وسیله کدهای زیر عناصر لیست، بر اساس مقدار دوم هر تاپل مرتب شدهاند:
data = [(1, 3), (2, 1), (4, 2)]
sorted_data = sorted(data, key=lambda x: x[1])
print(sorted_data) # خروجی: [(2,1), (4,2), (1,3)]
اموزش تابع لامبدا در پایتون به وسیله چندین مثال امکانپذیر نیست! ولی این مثالها شما را با کارایی این تابع آشنا میکند.
تابع لامبدا با تابع معمولی چه فرقی دارد؟
چه زمانی بهتر است از تابع لامبدا و چه زمانی بهتر است از تابع معمولی استفاده کنیم؟ برای رسیدن به پاسخ این سوال حتما جدول زیر را مطالعه کنید:
ویژگی | تابع لامبدا | تابع معمولی (def) |
---|---|---|
نام تابع | ندارد (بینام است) | دارای نام است |
طول بدنه تابع | فقط یک عبارت | میتواند چندین خط باشد |
خوانایی کد | برای عملیات ساده مناسب است | برای منطق پیچیده مناسب است |
استفاده مجدد | اغلب یکبار استفاده میشود | قابل استفاده مجدد است |
docstring | پشتیبانی نمیشود | پشتیبانی میشود |
برای یادگیری تابع و آموزش کامل تابع در پایتون میتوانید در دورههای مدرن و عملی آکادمی چابک شرکت کنید تا به راحتی بتوانید هر تابعی که میخواهید بنویسید!
مزایا و معایب تابع لامبدا چیست؟
با آموزش لامبدا بهتر است مزایا و معایب آن را نیز بررسی کنیم:
مزایا:
- نوشتار سریع و کوتاه
- عالی برای تعریف توابع یکبار مصرف
- هماهنگ با توابع مرتبه بالاتر مثل map و filter
معایب:
- فقط اجازه دارید یک عبارت در بدنه استفاده کنید
- اگر تو در تو بنویسید، خوانایی به شدت کاهش پیدا میکند
- قابلیت نوشتن توضیحات (docstring) وجود ندارد
- هنگام خطا، پیام خطا فقط عبارت <lambda> را نشان میدهد، نه نام تابع مشخص
نکات مهم هنگام استفاده از لامبدا
اگر منطق شما بیش از یک شرط یا عملیات دارد، بهتر است از تابع معمولی استفاده کنید. طبق استانداردهای PEP 8، بهتر است از اختصاص لامبدا به متغیر خودداری شود، مگر در شرایط خاص.
برای مثال:
# بد:
(lambda x: x * 10 if x > 10 else (x * 5 if x < 5 else x))(11)
# خوب:
def check_conditions(x):
if x > 10:
return x * 10
elif x < 5:
return x * 5
else:
return x
آیا لامبدا از نظر سرعت بهتر است؟
در یک سری از موقعیتها به دلیل ساختار سبکتر، لامبدا میتواند سریعتر اجرا شود. برای مثال در توابعی مثل map که روی لیستهای بزرگ اجرا میشوند، استفاده از لامبدا زمان اجرای کمتری دارد. اما تفاوت آنقدر زیاد نیست که استفاده از لامبدا را همیشه به تابع معمولی ترجیح بدهد. خوانایی و نگهداری راحتتر کد باید اولویت بالاتری داشته باشد.
جمعبندی
منظور از لامبدا در پایتون همان تابع بینام و کوتاهی است که برای انجام عملیاتهای ساده و فوری تعریف میشود. این موضوع بسیار مهم است که لامبدا مناسب هر کاری نیست. اگر نیاز به تعریف یک منطق سطح بالا دارید، تابع معمولی را انتخاب کنید. تابع لامبدا ابزاری سریع و ساده است، به شرطی که در جای درست و به شکل مناسب استفاده شود.
برای کسب اطلاعات بیشتر و آموزش لامبدا در پایتون میتوانید همین الان با ما تماس بگیرید تا با دورههای زبان برنامهنویسی پایتون آکادمی چابک آشنا شوید.
منبع:
دیدگاهتان را بنویسید