Lambda-Funktion — eine anonyme (namenlose) Funktion, die mit dem Schlüsselwort lambda definiert wird. Sie wird normalerweise dort verwendet, wo eine kurze Funktion "einmalig und vor Ort" benötigt wird.
add = lambda x, y: x + y print(add(1, 2)) # 3
Einschränkungen von Lambda-Funktionen:
Wann ist Lambda nützlich:
sorted, filter, map).Wann sollte man auf Lambda verzichten:
Frage: Können Lambda-Funktionen Variablen aus dem äußeren Geltungsbereich verwenden, und wie beeinflusst das ihr Verhalten innerhalb von Schleifen?
Antwort: Lambda-Funktionen können Variablen aus dem äußeren Kontext erfassen (lexikalische Schließung). Wenn sie innerhalb einer Schleife definiert werden, führt dies häufig zu unerwartetem Verhalten — die Lambda verwendet den aktuellen Wert der Variablen zum Zeitpunkt des Aufrufs und nicht den Wert, der "zum Zeitpunkt der Definition" existierte.
funcs = [] for i in range(3): funcs.append(lambda: i) # alle Funktionen geben 2 zurück (i=2 nach der Schleife) print([f() for f in funcs]) # [2, 2, 2]
Um den "alten" Wert zu erfassen:
funcs = [] for i in range(3): funcs.append(lambda i=i: i) print([f() for f in funcs]) # [0, 1, 2]
Geschichte
Im Projekt wurde Lambda verwendet, um eine Liste von Dictionaries nach einem bestimmten Schlüssel zu filtern. Die Lambda innerhalb der Schleife erfasste eine Variable, die zum Zeitpunkt des Aufrufs einen anderen (unerwarteten) Wert hatte. Ergebnis — falsche Filterung und Fehler in der Berichterstattung.
Geschichte
Ein großes Projekt in Django: komplexe Validierungsform, die als lange Ausdrucksform innerhalb einer Lambda-Funktion implementiert wurde. Später änderte sich die Geschäftslogik, die Lambda konnte den gesamten Code nicht mehr fassen, man musste auf eine normale Funktion umschreiben. Lambda verlangsamte das Debugging.
Geschichte
In einem Startup wurde Lambda schlecht für die Übergabe einer Sortierfunktion angewendet, wobei vergessen wurde, dass sie einen inkorrekten Typ zurückgibt (z.B. nicht ein Tupel, sondern eine Liste). Dies führte zu unvorhersehbarer Sortierung und Bugs bei der Daten-Deduplication.