توابع 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)کاهش به یک مقدار

این مبحث بخشی از دوره آموزش کامل پایتون است.

ابزارهای مرتبط