زبان برنامهنویسی پایتون ابزارهای متعددی برای سادهسازی و افزایش خوانایی کد فراهم میکند. یکی از این ابزارها که کاربرد فراوانی در نوشتن کدهای کوتاه و کارا دارد، تابع lambda است. این تابع که به عنوان تابع بینام یا “تابع ناشناس” نیز شناخته میشود، به برنامهنویسان این امکان را میدهد که توابع کوچک و موقت را به سرعت و به صورت مختصر تعریف کنند. در این مقاله به معرفی تابع lambda، نحوه استفاده از آن و کاربردهای مختلف آن خواهیم پرداخت.
تعریف تابع lambda
در پایتون، توابع lambda به عنوان یک روش برای تعریف توابع در یک خط استفاده میشوند. برخلاف توابع عادی که با کلمه کلیدی def تعریف میشوند، توابع lambda بدون نام هستند و تنها یک عبارت را شامل میشوند. این توابع میتوانند به راحتی به عنوان یک آرگومان به توابع دیگر منتقل شوند.
ساختار کلی تابع lambda به شکل زیر است:
lambda arguments: expressionarguments: ورودیهایی که تابع lambda دریافت میکند.
expression: یک عبارت که نتیجه آن بازگردانده میشود.
برای مثال، فرض کنید میخواهیم یک تابع ساده برای جمع دو عدد تعریف کنیم:
addition = lambda x, y: x + y
print(addition(5, 3))خروجی کد بالا برابر با 8 است. همانطور که مشاهده میکنید، تابع lambda به راحتی و با کمترین خط کد قابل تعریف است.
کاربردهای تابع lambda
توابع lambda اغلب برای اهداف خاص و موقتی استفاده میشوند که نیاز به تعریف یک تابع کامل ندارند. در ادامه به برخی از کاربردهای رایج این توابع میپردازیم.
1. استفاده در توابعی مانند map()، filter() و reduce()
توابع map()، filter() و reduce() توابعی هستند که در پایتون برای پردازش مجموعه دادهها به کار میروند. این توابع اغلب به همراه توابع lambda استفاده میشوند.
- مثال با
map():
تابع map() برای اعمال یک تابع به تمام عناصر یک لیست استفاده میشود. به عنوان مثال، فرض کنید میخواهیم تمام اعداد یک لیست را دو برابر کنیم:
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() برای فیلتر کردن عناصر یک لیست بر اساس شرط خاصی استفاده میشود. برای مثال، میخواهیم تنها اعداد زوج یک لیست را انتخاب کنیم:
numbers = [1, 2, 3, 4, 5, 6]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers)خروجی:
[2, 4, 6]- مثال با
reduce():
تابع reduce() که در ماژول functools قرار دارد، برای کاهش (ترکیب) عناصر یک لیست به کار میرود. به عنوان مثال، جمع تمام عناصر یک لیست:
from functools import reduce
numbers = [1, 2, 3, 4, 5]
sum_numbers = reduce(lambda x, y: x + y, numbers)
print(sum_numbers)خروجی:
152. مرتبسازی با استفاده از sorted()
تابع lambda میتواند به عنوان یک کلید (key) برای مرتبسازی دادهها استفاده شود. به عنوان مثال، فرض کنید لیستی از دیکشنریها داریم و میخواهیم آنها را بر اساس مقدار خاصی مرتب کنیم:
students = [
{'name': 'Ali', 'age': 21},
{'name': 'Sara', 'age': 19},
{'name': 'Reza', 'age': 22}
]
sorted_students = sorted(students, key=lambda x: x['age'])
print(sorted_students)خروجی:
[{'name': 'Sara', 'age': 19}, {'name': 'Ali', 'age': 21}, {'name': 'Reza', 'age': 22}]در این مثال، از یک تابع lambda برای تعیین کلید مرتبسازی استفاده شده است که بر اساس سن (age) عمل میکند.
3. استفاده در توابع ناشناس و موقتی
گاهی اوقات نیاز است تا یک تابع کوچک تنها یک بار در بخشی از کد استفاده شود. به جای تعریف یک تابع کامل با def، میتوان از تابع lambda استفاده کرد. برای مثال، فرض کنید میخواهیم تابعی برای چاپ پیام خاصی به کاربر بنویسیم:
(lambda message: print(f"Hello, {message}"))("World")خروجی:
Hello, Worldاین تابع lambda به صورت موقتی تعریف و بلافاصله اجرا میشود.
محدودیتهای توابع lambda
هرچند توابع lambda کاربردهای زیادی دارند، اما محدودیتهایی نیز دارند که باید در نظر گرفته شوند:
- محدودیت در تعداد خطوط: توابع lambda تنها یک خط کد را شامل میشوند و نمیتوانند چندین عبارت یا بلاک کد داشته باشند.
- کاهش خوانایی: اگرچه توابع lambda برای نوشتن کدهای کوتاه مناسب هستند، اما در موارد پیچیده ممکن است خوانایی کد را کاهش دهند. استفاده بیش از حد از توابع lambda میتواند موجب سردرگمی شود.
- عدم پشتیبانی از مستندات (docstring): برخلاف توابع معمولی که میتوانند مستندات (
docstring) داشته باشند، توابع lambda چنین امکانی ندارند.
جمعبندی
توابع lambda در پایتون ابزاری قدرتمند برای نوشتن توابع کوچک و موقتی هستند. این توابع به خصوص در مواقعی که نیاز به تعریف یک تابع کوچک و استفاده سریع از آن داریم، بسیار کارآمد هستند. از این توابع میتوان در توابعی مانند map()، filter() و reduce()، برای مرتبسازی دادهها، و به عنوان توابع موقتی استفاده کرد. با این حال، باید به محدودیتهای آن نیز توجه داشت و در مواردی که کد پیچیدهتر میشود، از توابع معمولی با def استفاده کرد تا خوانایی کد حفظ شود.


























