Lambda-functie is een anonieme (naamloze) functie, gedefinieerd met behulp van het sleutelwoord lambda. Het wordt meestal gebruikt waar een korte functie "eenmalig en ter plaatse" nodig is.
add = lambda x, y: x + y print(add(1, 2)) # 3
Beperkingen van lambda-functies:
Wanneer is lambda nuttig:
sorted, filter, map).Wanneer is het beter om lambda te vermijden:
Vraag: Kunnen lambda-functies variabelen uit een externe scope gebruiken, en hoe beïnvloedt dit hun gedrag bij gebruik binnen lussen?
Antwoord: Lambda-functies kunnen variabelen uit de externe context vastleggen (lexicale sluiting). Bij definiëren binnen een lus leidt dit vaak tot onverwacht gedrag — lambda gebruikt de huidige waarde van de variabele op het moment van aanroepen, niet wat "was op het moment van definitie".
funcs = [] for i in range(3): funcs.append(lambda: i) # alle functies retourneren 2 (i=2 na de lus) print([f() for f in funcs]) # [2, 2, 2]
Om de "oude" waarde vast te leggen:
funcs = [] for i in range(3): funcs.append(lambda i=i: i) print([f() for f in funcs]) # [0, 1, 2]
Verhaal
In een project werd lambda gebruikt om een lijst van dictionaries op een bepaalde sleutel te filteren. De lambda binnen de lus legde een variabele vast die op het moment van aanroepen een andere (onverwachte) waarde had. Resultaat — onjuiste filtering en fouten in rapportage.
Verhaal
Groot project op Django: complexe validatievorm, geïmplementeerd als een lange expressie binnen een lambda-functie. Later veranderde de bedrijfslogica, de lambda kon niet alle code meer bevatten, waardoor het herzien moest worden naar een gewone functie. Lambda vertraagde de debugging.
Verhaal
In een startup werd lambda onfortuinlijk gebruikt voor het doorgeven van een sorteervunctie, waarbij ze vergaten dat deze een ongeldig type retourneert (bijvoorbeeld, niet een tuple maar een lijst). Dit leidde tot onvoorspelbare sortering en bugs bij data-deduplicatie.