שיעורי מודול (4/4)
למבדה ופונקציות מסדר גבוה יותר
למבדה היא פונקציה אנונימית, המוגדרת על שורה אחת. תַחבִּיר:
lambda parametri: espressioneשווה ערך ל-def, אבל יותר תמציתי ומתאימה ל"השלך"
פונקציות לעבור לפונקציות אחרות.
quadrato = lambda x: x ** 2
quadrato(5) # 25
# equivalent to:
def quadrato(x):
return x ** 2הבדלים לעומת def
| היבט | def | lambda |
|---|---|---|
| שם | נדרש | אנונימי |
| גוף | הצהרות מרובות | ביטוי יחיד |
| לחזור | מפורש | מרומז (הביטוי) |
| docstring | כן | לא |
אין return בתוך למבדה: הערך של הביטוי הוא התוצאה.
מתי להשתמש בלמבדה
כמעט תמיד: כארגומנט key לפונקציות מיון או בחירה.
parole = ["banana", "kiwi", "mela", "fragola"]
sorted(parole, key=len)
# ['kiwi', 'mela', 'banana', 'fragola']key=len אומר לsorted: "כדי להשוות שני אלמנטים, השתמש באורך שלהם". עבור
קריטריונים מותאמים אישית, השתמש בלמבדה:
utenti = [
{"nome": "Ada", "eta": 36},
{"nome": "Linus", "eta": 54},
{"nome": "Grace", "eta": 85},
]
per_eta = sorted(utenti, key=lambda u: u["eta"])
# sorted by ascending ageשימושים טיפוסיים נוספים: min(...), max(...), filter(...), map(...).
nums = [-3, 1, -4, 1, -5, 9]
max(nums, key=lambda n: abs(n)) # -5 (maximum by absolute value)פונקציות מסדר גבוה יותר
פונקציה היא מסדר גבוה אם היא מקבלת פונקציה כארגומנט או
מחזיר אחד. sorted, max, filter, map הם מסדר גבוה יותר. למדה
קיים בדיוק כדי להקל על שיחות מסדר גבוה יותר.
מתי להימנע מפונקציות למבדה
פונקציות למבדה שימושיות עבור פעולות קצרות לזריקה (כמו מיון מהיר). עם זאת, אם אתה מוצא את עצמך מקצה למבדה למשתנה (למשל double = lambda x: x * 2), עדיף בדרך כלל להשתמש בבלוק def סטנדרטי למטרות קריאה וניפוי באגים (מכיוון שפונקציות המוגדרות עם def שומרות בטעות את השמות האמיתיים שלהן).
נסה את זה
בהינתן הרשימה 'מילים = ['בננה', 'קיווי', 'מלה', 'פרגולה']', מיין אותה לפי אורך עולה ל'לפי_אורך'. הערך 'לפי_אורך'.
הצג רמז
key=len (או lambda p: len(p)).
הפתרון זמין לאחר 3 ניסיונות
סקירת התרגיל
בהינתן רשימת הטפולים `נקודות = [(1, 5), (3, 2), (2, 4)]`, מיין אותם לפי האלמנט SECOND בסדר עולה והקצה אותם ל-`by_y`. הערך 'לפי_y'.
הצג רמז
lambda p: p[1]
הפתרון זמין לאחר 3 ניסיונות
אתגר נוסף
Define an anonymous `lambda` function that takes a number `x` and returns `True` if the number is even, and `False` otherwise. Assign the lambda to the variable `is_even` and test it with `is_even(8)` as the last line.
הצג רמז
כתוב is_even = lambda x: x % 2 == 0 ולאחר מכן קרא is_even(8).
הפתרון זמין לאחר 3 ניסיונות