توابع Lambda در پایتون
توابع بینام (lambda)، استفاده با map، filter، reduce و sorted
تابع Lambda چیست؟
تابع Lambda یک تابع کوچک و بینام (Anonymous) است که در یک خط تعریف میشود. برای عملیاتهای ساده و موقت مناسب است.
سینتکس
# lambda پارامترها: عبارت
square = lambda x: x ** 2
print(square(5)) # 25
مقایسه با def
# با def
def square(x):
return x ** 2
# با lambda (معادل)
square = lambda x: x ** 2
چند پارامتر
add = lambda a, b: a + b
print(add(5, 3)) # 8
multiply = lambda a, b, c: a * b * c
print(multiply(2, 3, 4)) # 24
شرط در Lambda
# عبارت شرطی
is_even = lambda x: "زوج" if x % 2 == 0 else "فرد"
print(is_even(4)) # زوج
print(is_even(7)) # فرد
استفاده با map()
map() یک تابع را روی همه عناصر اعمال میکند:
numbers = [1, 2, 3, 4, 5]
# توان دو هر عدد
squares = list(map(lambda x: x ** 2, numbers))
print(squares) # [1, 4, 9, 16, 25]
# تبدیل به رشته
strs = list(map(str, numbers))
print(strs) # ['1', '2', '3', '4', '5']
استفاده با filter()
filter() عناصری که شرط درست دارند را نگه میدارد:
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# اعداد زوج
evens = list(filter(lambda x: x % 2 == 0, numbers))
print(evens) # [2, 4, 6, 8, 10]
# اعداد بزرگتر از ۵
big = list(filter(lambda x: x > 5, numbers))
print(big) # [6, 7, 8, 9, 10]
استفاده با sorted()
Lambda برای تعیین کلید مرتبسازی عالی است:
students = [("علی", 18.5), ("مریم", 19.2), ("حسن", 17.8)]
# مرتب بر اساس نمره
sorted_by_grade = sorted(students, key=lambda x: x[1])
print(sorted_by_grade)
# مرتب نزولی
sorted_desc = sorted(students, key=lambda x: x[1], reverse=True)
print(sorted_desc)
مرتبسازی بر اساس طول رشته
words = ["پایتون", "کد", "برنامهنویسی", "جا"]
sorted_words = sorted(words, key=lambda w: len(w))
print(sorted_words) # ['کد', 'جا', 'پایتون', 'برنامهنویسی']
استفاده با reduce()
برای کاهش یک لیست به یک مقدار (نیاز به import):
from functools import reduce
numbers = [1, 2, 3, 4, 5]
# ضرب همه عناصر
product = reduce(lambda a, b: a * b, numbers)
print(product) # 120
# بزرگترین
maximum = reduce(lambda a, b: a if a > b else b, numbers)
print(maximum) # 5
Lambda در دیکشنری
operations = {
"add": lambda a, b: a + b,
"sub": lambda a, b: a - b,
"mul": lambda a, b: a * b,
}
print(operations["add"](5, 3)) # 8
print(operations["mul"](5, 3)) # 15
چه زمانی از Lambda استفاده کنیم؟
✅ مناسب:
- عملیاتهای ساده و کوتاه
- بهعنوان آرگومان به map/filter/sorted
- استفاده موقت و یکبار
- منطق پیچیده
- توابعی که چند بار استفاده میشوند
- وقتی به docstring نیاز دارید
خلاصه
| تابع | توضیح |
|---|---|
lambda x: expr | تابع بینام |
map(f, list) | اعمال تابع روی همه |
filter(f, list) | فیلتر کردن |
sorted(list, key=f) | مرتب با کلید |
reduce(f, list) | کاهش به یک مقدار |
این مبحث بخشی از دوره آموزش کامل پایتون است.