דילוג לתוכן המרכזי
מודול 5 · שיעור 4 מתוך 420/36 בקורס~10 min
שיעורי מודול (4/4)

למבדה ופונקציות מסדר גבוה יותר

למבדה היא פונקציה אנונימית, המוגדרת על שורה אחת. תַחבִּיר:

Python
lambda parametri: espressione

שווה ערך ל-def, אבל יותר תמציתי ומתאימה ל"השלך" פונקציות לעבור לפונקציות אחרות.

Python
quadrato = lambda x: x ** 2
quadrato(5)    # 25

# equivalent to:
def quadrato(x):
    return x ** 2

הבדלים לעומת def

היבטdeflambda
שםנדרשאנונימי
גוףהצהרות מרובותביטוי יחיד
לחזורמפורשמרומז (הביטוי)
docstringכןלא

אין return בתוך למבדה: הערך של הביטוי הוא התוצאה.

מתי להשתמש בלמבדה

כמעט תמיד: כארגומנט key לפונקציות מיון או בחירה.

Python
parole = ["banana", "kiwi", "mela", "fragola"]
sorted(parole, key=len)
# ['kiwi', 'mela', 'banana', 'fragola']

key=len אומר לsorted: "כדי להשוות שני אלמנטים, השתמש באורך שלהם". עבור קריטריונים מותאמים אישית, השתמש בלמבדה:

Python
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(...).

Python
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 שומרות בטעות את השמות האמיתיים שלהן).

נסה את זה

פעילות גופנית#python.m5.l4.e1
ניסיונות: 0טוען...

בהינתן הרשימה 'מילים = ['בננה', 'קיווי', 'מלה', 'פרגולה']', מיין אותה לפי אורך עולה ל'לפי_אורך'. הערך 'לפי_אורך'.

טוען עורך...
הצג רמז

key=len (או lambda p: len(p)).

הפתרון זמין לאחר 3 ניסיונות

סקירת התרגיל

פעילות גופנית#python.m5.l4.e2
ניסיונות: 0טוען...

בהינתן רשימת הטפולים `נקודות = [(1, 5), (3, 2), (2, 4)]`, מיין אותם לפי האלמנט SECOND בסדר עולה והקצה אותם ל-`by_y`. הערך 'לפי_y'.

טוען עורך...
הצג רמז

lambda p: p[1]

הפתרון זמין לאחר 3 ניסיונות

אתגר נוסף

פעילות גופנית#python.m5.l4.e3
ניסיונות: 0טוען...

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 ניסיונות