Eine Funktion, die du nicht benennst
Die meisten Funktionen in Python sind mit def definiert, haben Namen und leben in einer Datei, in der sie wiederverwendet werden können. Ein lambda ist eine kleinere, unbenannte Alternative — nützlich in den wenigen Fällen, in denen eine volle Funktionsdefinition mehr Zeremonie wäre als sie wert ist.
Hier die Form Seite an Seite:
Zwei Funktionen, beide tun genau das Gleiche. Die Lambda-Fassung passt in eine Zeile, denn das ist im Grunde ihr Job: eine Wegwerf-Funktion für einen Wegwerf-Moment.
Syntax
lambda <params>: <expression>
<params>ist dieselbe Parameterliste, die eindefnutzen würde — Defaults,*args,**kwargswerden unterstützt.<expression>ist ein einzelner Ausdruck, dessen Wert zum Rückgabewert wird.
Beispiele:
Kein return-Schlüsselwort. Der Wert des Ausdrucks wird implizit zurückgegeben.
Die eine Einschränkung
Ein Lambda darf nur einen einzigen Ausdruck enthalten. Anweisungen sind nicht erlaubt:
Aber der ternäre Ausdruck geht:
Brauchst du mehr als einen Ausdruck, ist das dein Zeichen, auf def zu wechseln.
Wo Lambdas sich wirklich lohnen
Ein Lambda, das einer Variable zugewiesen wird, ist fast immer schlechter als ein benanntes def:
Das ist strikt schlechter als def double(x): return x * 2 — gleiche Lesbarkeit, plus die Lambda-Fassung zeigt Debuggern den wenig hilfreichen Namen <lambda> in Stack-Traces.
Lambdas glänzen an genau einer Stelle: als Inline-Argumente für Higher-Order-Funktionen.
Eigene Sortierschlüssel
Der Klassiker:
Das key-Argument von sorted will eine Funktion, die ein Element nimmt und den Wert für die Sortierung zurückgibt. Ein Einzeiler-Lambda passt genau — ein volles def wäre für so etwas Kleines zu schwer.
Nach mehreren Feldern sortierst du mit einem Tupel:
min, max, filter, map
Gleiche Geschichte — alle nehmen ein optionales Funktionsargument:
Für map und filter ist eine List Comprehension meist sogar klarer:
Die meisten Pythonistas greifen aus diesem Grund zu Comprehensions statt zu map/filter. lambda bleibt ein natürlicher Partner für sorted, min und max, wo es keine Comprehension-Abkürzung gibt.
Lambdas und operator
Wenn dein Lambda nur „einen Schlüssel holen“ oder „ein Attribut holen“ ist, bietet das Modul operator schnellere und klarere Alternativen:
Kein riesiger Gewinn, aber in Code, der ohnehin operator importiert, liest es sich etwas deklarativer.
Wann du zurück zu def wechselst
Ist etwas davon wahr, schreib ein def:
- Die Logik passt nicht sauber in einen einzigen Ausdruck.
- Du willst die Funktion benennen, weil der Name die Lesbarkeit stützt.
- Du würdest dieselbe Logik an mehr als einer Stelle nutzen.
- Die Funktion braucht einen Docstring (Lambdas können keinen tragen).
Erinner dich: Python wird nicht nach Zeilenzahl bewertet. Eine dreizeilige benannte Funktion liest sich fast immer besser als ein einzeiliges Lambda, sobald die Logik nicht trivial ist.
Als Nächstes: Dekoratoren
Lambdas reichen Funktionen als Werte weiter. Dekoratoren treiben die Idee einen Schritt weiter: sie lassen dich jede Funktion mit wiederverwendbarem Verhalten umhüllen — Logging, Zeiterfassung, Caching, Auth — mit einem einzigen @ auf der Zeile darüber. Das ist die nächste Seite.
Häufig gestellte Fragen
Was ist ein Lambda in Python?
Ein lambda ist eine kurze, anonyme Funktion, die du in einer Zeile schreibst. lambda x: x * 2 entspricht def double(x): return x * 2, nur ohne Namen. Am nützlichsten, wenn du eine winzige Funktion als Argument an eine andere Funktion übergibst.
Wann soll ich lambda statt def verwenden?
Nimm lambda für einmalige Ein-Ausdrucks-Funktionen, die du direkt an etwas wie sorted, max oder filter übergibst. Für alles mit mehr als einem einzelnen Ausdruck — oder alles, was du benennen würdest — nimm def. Benannte Funktionen sind fast immer klarer.
Welche Grenzen hat lambda?
Ein Lambda darf nur einen einzigen Ausdruck enthalten, keine Anweisungen. Keine Zuweisungen, keine if-Blöcke (wohl aber den ternären a if cond else b), keine mehrzeilige Logik. Kämpfst du mit diesen Grenzen, wechsle zu def.