لامبدا در پایتون
در این بخش به بررسی لامبدا در پایتون می پردازیم.
لامبدا یا تابعهای ناشناخته، توابعی هستند که در پایتون میتوانید به صورت اختصاری تعریف کنید. تابع لامبدا به طور کلی به شکل زیر تعریف میشود:
lambda arguments: expression
در این تعریف، arguments میتواند هر تعدادی از ورودیهای تابع باشد، و expression نیز یک عبارت است که به عنوان بدنه تابع استفاده میشود. این تابع مقدار بازگشتی خود را به صورت خودکار با استفاده از عبارت return برمیگرداند.
به عنوان مثال، تابع لامبدای زیر را در نظر بگیرید:
lambda x: x**2
این تابع یک یک مقدار از ورودی به نام x را دریافت میکند و مقدار x را در مربع قرار داده و مقدار حاصل را به عنوان خروجی برمیگرداند. میتوانید این تابع را با استفاده از دستور lambda به صورت زیر تعریف کنید:
square = lambda x: x**2
حالا تابع square میتواند برای محاسبه مربع اعداد مختلف استفاده شود، به این صورت:
>>> square(2)
4
>>> square(3)
9
>>> square(4)
16
تابع لامبدا میتواند به عنوان یک ابزار بسیار قدرتمند برای بسیاری از کارها مانند تعریف توابع محاسباتی ساده، تعریف توابع فیلترینگ و تحلیل داده، تعریف توابع مرتب سازی و سایر کاربردهایی که نیاز به تابع ساده و یکبار مصرف دارند، استفاده شود.
تابع لامبدا میتواند به صورت پیشفرض، تنها یک عبارت باشد. اما با استفاده از پرانتز، میتوانید یک بلوک کد کامل را به عنوان عبارت تابع لامبدا تعریف کنید. به عنوان مثال، تابع لامبدای زیر یک لیست از اعداد را به عنوان ورودی دریافت کرده، فقط اعداد فرد را انتخاب کرده و آنها را در قالب یک لیست برمیگرداند:
در این مثال، تابع
filter()
از تابع لامبدایی استفاده میکند که وضعیت فرد یا زوج بودن یک عدد را بررسی میکند. با استفاده از تابع filter()
، فقط عددهایی که تابع لامبدا برای آنها برمیگرداند True هستند، در لیست جدید odds ذخیره میشوند.توجه داشته باشید که در بسیاری از موارد، استفاده از تابع لامبدایی ممکن است مشکلاتی در خوانایی کد ایجاد کند، به خصوص در صورتی که تابع بسیار پیچیده باشد و بیش از یک پارامتر و بیش از یک عبارت استفاده کند. بنابراین، در این موارد، بهتر است از تعریف تابع در خارج از تابع لامبدا استفاده کنید.
مثال های بیشتر برای توابع lambda در پایتون
در این مثال، به جای تعریف تابع لامبدایی برای بررسی وضعیت فرد یا زوج بودن یک عدد، تابع
is_odd()
تعریف شده است که به عنوان ورودی یک عدد دریافت میکند و True یا False را برای وضعیت فرد یا زوج بودن برمیگرداند. در نهایت، تابع filter()
از تابع is_odd()
استفاده میکند و فقط عددهایی که تابع is_odd()
برای آنها True برگردانده است، در لیست جدید odds
ذخیره میشوند.ترکیب تابع های لامبدایی
در این مثال، دو تابع لامبدایی به صورت زیر تعریف میشوند:
add = lambda x, y: x + y
square = lambda x: x**2
سپس با استفاده از تابع map()
و ترکیب این دو تابع لامبدایی، اعدادی که در یک لیست ورودی داده شدهاند را به صورت جمع دو تا دو، به توان دو میرسانیم:
خروجی این کد برابر است با:
[8, 18, 32, 50, 72]
استفاده از تابع لامبدایی در تعریف کلاس
در این مثال، یک کلاس ساده به نام Person
تعریف شده است که شامل دو ویژگی name
و age
است:
حال به جای استفاده از تابع معمولی به عنوان متد
__str__()
کلاس Person، از یک تابع لامبدایی استفاده میکنیم:با این کار، توانستیم متد
__str__()
را به صورت یک تابع لامبدایی تعریف کنیم که نیازی به تعریف تابع معمولی نیست. حال میتوانیم از این کلاس به صورت زیر استفاده کنیم:person = Person("John", 30)
print(person)
خروجی این کد برابر است با:
John (30)
استفاده از تابع لامبدایی در تابع sorted()
در این مثال، یک لیست از دیکشنریها به صورت زیر تعریف شده است:
people = [{"name": "John", "age": 25}, {"name": "Jane", "age": 30}, {"name": "Bob", "age": 20}]
میخواهیم این لیست را بر اساس سن افراد مرتب کنیم. به جای تعریف یک تابع معمولی به عنوان کلید مرتبسازی، از یک تابع لامبدایی استفاده میکنیم:
result = sorted(people, key=lambda person: person["age"])
print(result)
خروجی این کد برابر است با:
[{'name': 'Bob', 'age': 20}, {'name': 'John', 'age': 25}, {'name': 'Jane', 'age': 30}]
استفاده از تابع لامبدایی در تابع filter()
در این مثال، یک لیست از اعداد به صورت زیر تعریف شده است:
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
میخواهیم اعدادی که بر ۳ بخشپذیر هستند، را از این لیست استخراج کنیم. با استفاده از تابع لامبدایی در تابع filter()
، این کار را انجام میدهیم:
result = list(filter(lambda x: x % 3 == 0, numbers))
print(result)
خروجی این کد برابر است با:
[3, 6, 9]
استفاده از تابع لامبدایی در تابع reduce()
در این مثال، یک لیست از اعداد به صورت زیر تعریف شده است:
numbers = [1, 2, 3, 4, 5]
میخواهیم حاصلضرب این اعداد را با استفاده از تابع reduce()
و تابع لامبدایی محاسبه کنیم:
خروجی این کد برابر است با:
120
در این مثال، تابع reduce()
از ماخواسته که دو عدد پیاپی در لیست اعداد را در هم ضرب کرده و حاصل آنها را با عدد بعدی در لیست ضرب کند تا در نهایت حاصلضرب تمامی اعداد به دست آید. در تابع لامبدایی نیز، متغیرهای x و y به ترتیب با دو عدد پیاپی از لیست اعداد مقداردهی میشوند. سپس عمل ضرب بین آنها صورت میگیرد.
آیا این مطلب برای شما مفید بود ؟