🐍 کتابخانه مرجع پایتون

🔹 توابع لامبدا (Lambda Functions) در پایتون

توابع لامبدا توابع ناشناس (Anonymous) و یک‌خطی هستند که با کلمه کلیدی lambda تعریف می‌شوند. این توابع برای عملیات ساده و کوتاه مناسب هستند و معمولاً به عنوان آرگومان به توابع دیگر (مانند map، filter و sorted) ارسال می‌شوند.

🔹 تعریف تابع لامبدا

# تابع معمولی
def add(a, b):
    return a + b

# تابع لامبدا معادل
add_lambda = lambda a, b: a + b

print(add(3, 5))           # 8
print(add_lambda(3, 5))    # 8
⏳ برای اجرا دکمه را بزنید...

🔹 لامبدا با یک پارامتر

# مربع یک عدد
square = lambda x: x ** 2
print(square(5))   # 25

# نمایش پیام
greet = lambda name: f"Hello, {name}!"
print(greet("Saba"))   # Hello, Saba!
⏳ برای اجرا دکمه را بزنید...

🔹 لامبدا با چند پارامتر

# جمع دو عدد
sum_lambda = lambda a, b: a + b
print(sum_lambda(10, 20))   # 30

# بزرگترین عدد
max_lambda = lambda x, y: x if x > y else y
print(max_lambda(15, 30))   # 30
⏳ برای اجرا دکمه را بزنید...

🔹 لامبدا بدون پارامتر

# لامبدا بدون پارامتر
greeting = lambda: "Hello, World!"
print(greeting())   # Hello, World!

# لامبدا بدون پارامتر با محاسبه
pi = lambda: 3.14159
print(f"Pi: {pi()}")
⏳ برای اجرا دکمه را بزنید...

🔹 استفاده از لامبدا با map

map یک تابع را روی همه عناصر یک دنباله اعمال می‌کند.

# مربع اعداد
numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x ** 2, numbers))
print(squared)

# تبدیل به حروف بزرگ
words = ["hello", "world", "python"]
uppercase = list(map(lambda w: w.upper(), words))
print(uppercase)
⏳ برای اجرا دکمه را بزنید...

🔹 استفاده از لامبدا با filter

filter عناصری را که شرط را برآورده می‌کنند، انتخاب می‌کند.

# اعداد زوج
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
evens = list(filter(lambda x: x % 2 == 0, numbers))
print(evens)

# کلمات با طول بیشتر از ۳
words = ["cat", "dog", "elephant", "ant", "tiger"]
long_words = list(filter(lambda w: len(w) > 3, words))
print(long_words)
⏳ برای اجرا دکمه را بزنید...

🔹 استفاده از لامبدا با sorted

با key می‌توانید ترتیب مرتب‌سازی را مشخص کنید.

# مرتب‌سازی بر اساس طول رشته
words = ["apple", "banana", "cherry", "date"]
sorted_words = sorted(words, key=lambda w: len(w))
print(sorted_words)

# مرتب‌سازی دیکشنری بر اساس مقدار
people = [
    {"name": "Saba", "age": 28},
    {"name": "Ali", "age": 24},
    {"name": "Reza", "age": 30}
]
sorted_people = sorted(people, key=lambda p: p["age"])
print(sorted_people)

# مرتب‌سازی نزولی
sorted_desc = sorted(people, key=lambda p: p["age"], reverse=True)
print(sorted_desc)
⏳ برای اجرا دکمه را بزنید...

🔹 استفاده از لامبدا با reduce

reduce یک تابع را به صورت تجمعی روی عناصر اعمال می‌کند.

from functools import reduce

# محاسبه حاصلضرب اعداد
numbers = [1, 2, 3, 4, 5]
product = reduce(lambda x, y: x * y, numbers)
print(product)  # 120

# محاسبه مجموع اعداد
sum_all = reduce(lambda x, y: x + y, numbers)
print(sum_all)  # 15
⏳ برای اجرا دکمه را بزنید...

🔹 ترکیب map و filter با لامبدا

# مربع اعداد زوج
numbers = [1, 2, 3, 4, 5, 6, 7, 8]
result = list(map(lambda x: x ** 2, filter(lambda x: x % 2 == 0, numbers)))
print(result)

# تبدیل به حروف بزرگ کلمات با طول بیشتر از ۳
words = ["cat", "dog", "elephant", "ant", "tiger"]
result = list(map(lambda w: w.upper(), filter(lambda w: len(w) > 3, words)))
print(result)
⏳ برای اجرا دکمه را بزنید...

🔹 مقایسه لامبدا و کامپرهنشن

# با map و لامبدا
numbers = [1, 2, 3, 4, 5]
squared_map = list(map(lambda x: x ** 2, numbers))

# با کامپرهنشن
squared_comp = [x ** 2 for x in numbers]

print(f"Map: {squared_map}")
print(f"Comprehension: {squared_comp}")

# با filter و لامبدا
evens_map = list(filter(lambda x: x % 2 == 0, numbers))

# با کامپرهنشن
evens_comp = [x for x in numbers if x % 2 == 0]

print(f"Filter: {evens_map}")
print(f"Comprehension: {evens_comp}")
⏳ برای اجرا دکمه را بزنید...

🔹 محدودیت‌های توابع لامبدا

🔹 مثال جامع: مدیریت داده با لامبدا

from functools import reduce

# لیست محصولات
products = [
    {"name": "Laptop", "price": 1200, "stock": 10},
    {"name": "Phone", "price": 800, "stock": 25},
    {"name": "Tablet", "price": 500, "stock": 15},
    {"name": "Monitor", "price": 300, "stock": 8},
    {"name": "Keyboard", "price": 100, "stock": 30}
]

# ۱. پیدا کردن محصولات با قیمت بالای ۵۰۰
expensive = list(filter(lambda p: p["price"] > 500, products))
print("Expensive products:")
for p in expensive:
    print(f"  {p['name']} (${p['price']})")

# ۲. محاسبه ارزش کل موجودی هر محصول
product_value = list(map(
    lambda p: {"name": p["name"], "value": p["price"] * p["stock"]},
    products
))
print("\nProduct values:")
for p in product_value:
    print(f"  {p['name']}: ${p['value']}")

# ۳. مرتب‌سازی محصولات بر اساس قیمت
sorted_products = sorted(products, key=lambda p: p["price"], reverse=True)
print("\nProducts sorted by price (descending):")
for p in sorted_products:
    print(f"  {p['name']} (${p['price']})")

# ۴. محاسبه مجموع قیمت همه محصولات
total_value = reduce(lambda acc, p: acc + p["price"] * p["stock"], products, 0)
print(f"\nTotal inventory value: ${total_value}")

# ۵. نام محصولات با موجودی بیش از ۱۰
names = list(map(
    lambda p: p["name"],
    filter(lambda p: p["stock"] > 10, products)
))
print(f"Products with stock > 10: {names}")
⏳ برای اجرا دکمه را بزنید...

📌 نکات کلیدی

← قبلی: کامپرهنشن‌ها → بعدی: *args و **kwargs ↑ بازگشت به فهرست مقدماتی