الدرس 5 من 8

Comprehensions و Lambda

الطريقة البايثونية لكتابة الحاجات المتكررة.

List Comprehension

كتير هتلاقي نفسك بتعمل list فاضية، وتلف على list تانية، وتضيف فيها. الـ comprehension بتعمل ده كله في سطر واحد. قارن بين الطريقتين:

prices = [100, 250, 80, 400]

with_vat = []
for p in prices:
    with_vat.append(p * 1.14)

print(with_vat)

٤ سطور عشان تعمل حاجة بسيطة.

مع شرط

filter.py
orders = [120, 45, 800, 30, 560]

# Keep only orders above 100
big_orders = [o for o in orders if o > 100]
print(big_orders)

# Clean a list of names
names = ["  ali ", "SARA", " omar"]
clean = [n.strip().title() for n in names]
print(clean)

نفس الفكرة مع dict و set

dict_comp.py
products = ["tea", "coffee", "juice"]
prices = [15, 35, 25]

# Build a dict from two lists with zip()
menu = {name: price for name, price in zip(products, prices)}
print(menu)

# Set comprehension: unique email domains
emails = ["a@gmail.com", "b@yahoo.com", "c@gmail.com"]
domains = {e.split("@")[1] for e in emails}
print(domains)

الـ Lambda: دالة صغيرة من غير اسم

ساعات محتاج function صغيرة جداً هتستخدمها مرة واحدة بس. بدل ما تعملها بـ def، بتكتبها lambda. أشهر استخدام ليها مع sorted عشان تقوله يرتب على أساس إيه.

lambda.py
products = [
    {"name": "Mouse", "price": 350},
    {"name": "Laptop", "price": 24000},
    {"name": "Keyboard", "price": 900},
]

# Sort by price: key tells sorted() WHAT to compare
cheapest_first = sorted(products, key=lambda p: p["price"])
print([p["name"] for p in cheapest_first])

# Most expensive first
priciest = sorted(products, key=lambda p: p["price"], reverse=True)
print(priciest[0]["name"])

lambda p: p["price"] هي نفسها بالظبط def get_price(p): return p["price"]، بس مكتوبة في سطر.

⚠ متبالغشلو الـ comprehension بقت طويلة وفيها أكتر من شرط ولوب جوه لوب، ارجع للـ for العادي. الكود الواضح أهم من الكود القصير. نفس الكلام للـ lambda: لو معقدة، اعملها def بإسم واضح.
الدرس اللي فات