الدرس 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)
٤ سطور عشان تعمل حاجة بسيطة.
مع شرط
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
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 عشان تقوله يرتب على أساس إيه.
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 بإسم واضح.