Lambda-Funktionen in Python

Wie in zahlreichen anderen Programmiersprachen, gibt es auch in Python die Möglichkeit, anonyme Funktionen (Lambda-Funktionen) zu erstellen. Darunter versteht man Funktionen, die über keinen Funktionsnamen verfügen.[1] Anhand von zwei Beispielen möchte ich demonstrieren, wie diese Funktionen genutzt werden können.

Zunächst werfen wir einen Blick auf die Syntax:

lambda arguments : expression

Dabei kann die Anzahl der Argumente beliebig sein. Es darf aber nur ein Ausdruck vorhanden sein.

Betrachten wir als nächstes eine einfache Funktion. Es sollen lediglich zwei Werte multipliziert werden:

def multiply_values(a, b):
return a * b

print(multiply_values(2, 2)) # -> 4

Mit einer Lambda-Funktion würde dies wie im folgenden Beispiel aussehen. Der Rückgabewert der Lambda-Funktion wird hier der Variablen multiply_values zugewiesen.

multiply_values = lambda x, y: x*y
print(multiply_values(2, 2)) # -> 4

Im zweiten Beispiel soll jedes Element einer Liste mit dem Wert 2 multipliziert werden. Hierbei nutze ich die Built-In-Funktionen range() und len().[2]

my_values = [6, 8, 10, 12, 14]

for i in range(len(my_values)):
    my_values[i] *= 2

print(my_values)
# -> [12, 16, 20, 24, 28]   

Als Variante zur for-Schleife kommt nun map() zum Einsatz. Diese Funktion erwartet als ersten Parameter eine Funktion und als zweiten Parameter eine Sequenz. Es ist also möglich, die Lambda-Funktion als Argument zu übergeben.

my_values = map(lambda i: i * 2, my_values)
print(list(my_values))
# -> [12, 16, 20, 24, 28]

An diesem Beispiel wird deutlich, welchen Vorteil eine Lambda-Funktion hat: Der Code läßt sich (hier zu einem Einzeiler) verkürzen. Freilich kann man sich aber darüber streiten, ob dies auf Kosten der Lesbarkeit geht. Außerdem mag – gerade bei Einsteigern – eine Lambda-Funktion große Konfusion auslösen.

Der Vollständigkeit halber sei erwähnt, dass man als Variante auch eine list comprehension verwenden könnte:

my_values = [i * 2 for i in my_values]
print(my_values)
# -> [12, 16, 20, 24, 28]

Wie Ihr den Beispielen entnehmen könnt, führen – wie so häufig – mehrere Wege zum Ziel. Ob man in der Praxis auf eine Lambda-Funktion zurückgreift, wird dabei häufig Geschmacksache sein.


  1. Vgl. den entsprechenden Wikipedia-Artikel.  ↩

  2. Eine Übersicht zu den Built-In-Funktionen findet sich in der offiziellen Python-Dokumentation.  ↩