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 : expressionDabei 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)) # -> 4Mit 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)) # -> 4Im 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. Als Argumente werden ihr die Lambda-Funktion und die Liste my_values (eine Sequenz) übergeben.
my_values = [6, 8, 10, 12, 14]
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.
-
Vgl. den entsprechenden Wikipedia-Artikel. ↩
-
Eine Übersicht zu den Built-In-Funktionen findet sich in der offiziellen Python-Dokumentation. ↩
Zuletzt aktualisiert am 21. März 2020