Direkt zum Hauptinhalt springen
eLearner.app
Modul 5 · Lektion 4 von 420/36 im Kurs~10 min
Lektionen des Moduls (4/4)

Lambda-Funktionen und Funktionen höherer Ordnung

Eine Lambda-Funktion ist eine anonyme Funktion, die auf einer einzelnen Zeile definiert wird. Syntax:

Python
lambda parametri: espressione

Äquivalent zu def, aber prägnanter und gut geeignet für "Wegwerf"-Funktionen, die an andere Funktionen übergeben werden.

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

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

Unterschiede zu def

Aspektdeflambda
Nameerforderlichanonym
Körpermehrere Anweisungeneine EINZELNE Expression
Returnexplizitimplizit (die Expression)
Docstringjanein

Kein return innerhalb eines Lambdas: Der Wert des Ausdrucks IST das Ergebnis.

Wann man Lambdas benutzt

Fast immer: als key-Argument für Sortier- oder Auswahlfunktionen.

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

key=len sagt sorted: "Um zwei Elemente zu vergleichen, verwende ihre Länge". Verwende für benutzerdefinierte Kriterien ein Lambda:

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

Andere typische Anwendungen: min(...), max(...), filter(...), map(...).

Python
nums = [-3, 1, -4, 1, -5, 9]
max(nums, key=lambda n: abs(n))   # -5 (maximum by absolute value)

Funktionen höherer Ordnung

Eine Funktion ist höherer Ordnung, wenn sie eine Funktion als Argument akzeptiert oder eine zurückgibt. sorted, max, filter, map sind höherer Ordnung. Lambda existiert genau, um Aufrufe höherer Ordnung zu erleichtern.

Wann man Lambda-Funktionen vermeiden sollte

Lambda-Funktionen sind nützlich für kurze, einmalige Operationen (wie schnelles Sortieren). Wenn du dich jedoch dabei ertappst, ein Lambda einer Variablen zuzuweisen (z.B. double = lambda x: x * 2), wird im Allgemeinen ein Standard-def-Block bevorzugt, um die Lesbarkeit und das Debugging zu verbessern (da mit def definierte Funktionen ihre echten Namen in Error-Tracebacks behalten).

Probiere es aus

Übung#python.m5.l4.e1
Versuche: 0Wird geladen…

Gegeben sei die Liste `words = ['banana', 'kiwi', 'mela', 'fragola']`. Sortiere sie nach aufsteigender Länge in `by_length`. Evaluiere `by_length`.

Editor wird geladen…
Hinweis anzeigen

key=len (oder lambda p: len(p)).

Lösung nach 3 Versuchen verfügbar

Wiederholungsübung

Übung#python.m5.l4.e2
Versuche: 0Wird geladen…

Gegeben sei die Liste von Tupeln `points = [(1, 5), (3, 2), (2, 4)]`. Sortiere sie nach dem ZWEITEN Element in aufsteigender Reihenfolge und weise das Ergebnis `by_y` zu. Evaluiere `by_y`.

Editor wird geladen…
Hinweis anzeigen

lambda p: p[1]

Lösung nach 3 Versuchen verfügbar

Zusätzliche Herausforderung

Übung#python.m5.l4.e3
Versuche: 0Wird geladen…

Definiere eine anonyme `lambda`-Funktion, die eine Zahl `x` nimmt und `True` zurückgibt, wenn die Zahl gerade ist, andernfalls `False`. Weise das Lambda der Variablen `is_even` zu und teste es mit `is_even(8)` als letzte Zeile.

Editor wird geladen…
Hinweis anzeigen

Schreibe is_even = lambda x: x % 2 == 0 und rufe dann is_even(8) auf.

Lösung nach 3 Versuchen verfügbar