در قسمت قبل، از دوره آموزش پایتون فنولوژی، در مورد تابع در پایتون صحبت کردیم. اکنون در مورد نوع خاصی از توابع به نام تابع lambda در پایتون صحبت میکنیم. این توابع کاربردهای خاصی دارند و برای تعریف آنها نیاز به استفاده از هیچ نامی نیست. تا انتهای این آموزش با فنولوژی همراه باشید.
تابع lambda در پایتون چیست؟
از lambda در پایتون در مواقعی استفاده میکنیم، که بخواهیم یک تابع بدون نام کوچک را در موارد مختلف استفاده کنیم. این تابع کاربردهای خاصی دارد و به علت کوچک بودن نمیتوان همهجا از آن استفاده کرد. در ادامه مثالهای کاربردی بیشتری را مشاهده خواهید کرد.
سینتکس lambda در پایتون
در زیر سینتکس این تابع را مشاهده میکنید. در قطعه سینتکس زیر، پارامترها یا آرگومانها ورودی داده میشوند و جملهای که قرار است اجرا شود روبروی علامت دو نقطه نوشته میشود. (توجه کنید کوچک بودن به این معنی است که در بخش expression نمیتوان بیش از یک عبارت قرار داد.) در نهایت خروجی را میتوان به صورت یک تابع ذخیره کرد.
1 |
lambda arguments : expression |
مثال: در مثال زیر میخواهیم به هر عددی مانند a، ده واحد اضافه کنیم. برای این کار تابع لاندا را در متغیر x ذخیره میکنیم.
1 2 |
x = lambda a : a + 10 print(x(5)) |
خروجی:
1 |
15 |
توجه کنید که معادل def تابع بالا به صورت زیر است:
1 2 3 4 |
def PlusTen(a): return a+10 print(PlusTen(5)) |
همچنین توابع lambda در پایتون میتوانند چندین آرگومان ورودی داشته باشند. به مثالهای زیر توجه کنید:
1 2 3 4 5 |
x = lambda a, b : a * b print(x(5, 6)) y = lambda a, b, c : a + b + c print(y(5, 6, 2)) |
خروجی:
1 2 |
30 13 |
چرا از lambda در پایتون استفاده میکنیم؟
قدرت lambda در پایتون وقتی مشخص میشود که از آن در داخل سایر توابع استفاده کنیم. در این صورت میتوان مثلا در خروجی تابع از لامبدا استفاده کرد و توابع جدیدی از تابع اصلی ایجاد کرد.
به مثال زیر توجه کنید. در این مثال میخواهیم تابعی بسازیم که با استفاده از آن توابع دیگری برای ضرب اعداد استخراج شود. برای این کار در بخش return تابع اصلی، از lambda استفاده میکنیم. در این صورت تابع mydoubler هر عددی بگیرد دو برابر میکند و تابع mytripler هر عددی که بگیرد را سه برابر خواهد کرد.
1 2 3 4 5 6 7 8 |
def myfunc(n): return lambda a : a * n mydoubler = myfunc(2) mytripler = myfunc(3) print(mydoubler(11)) print(mytripler(11)) |
1 2 |
22 33 |
سینتکس دیگر تابع بدون نام
میتوان به جای اینکه تابع را در یک متغیر ذخیره کنیم، آن را مستقیما داخل یک پرانتز قرار دهیم و در پرانتز دیگری جلوی آن، به آن مقدار دهی کرده و آن را فراخوانی کنیم. به مثال زیر توجه کنید که عدد ۲ را به عنوان ورودی میگیرد و یکی به آن اضافه میکند.
1 |
print((lambda x: x + 1)(2)) |
مثال کاربردی از lambda در پایتون
در این مثال با گرفتن نام و نام خانوادگی به عنوان ورودی، در خروجی یک رشته در پایتون که شامل نام و نام خانوادگی کامل است به نمایش در میآید.
1 2 |
full_name = lambda first, last: f'Full name: {first.title()} {last.title()}' full_name('guido', 'van rossum') |
1 |
Full name: Guido Van Rossum |