Python - unbekannte Funktionen: lambda

  Ralf Hersel   Lesezeit: 4 Minuten  🗪 2 Kommentare

Mit Lambda definiert ihr eine abstrakte, namenlose Funktion.

python - unbekannte funktionen: lambda

Nachdem ich zip und map erklärt habe, geht es heute um eine weitere seltsame Python-Funktion. Und diese Funktion hat sogar eine Historie. Es geht um die anonyme Funktion lambda, die es auch in anderen Programmiersprachen gibt. Alonzo Church formalisierte in den 1930er Jahren das Lambda-Kalkül, eine Sprache, die auf reiner Abstraktion beruht. Das Lambda-Kalkül kann beliebige Berechnungen kodieren. Es ist Turing-komplett, aber im Gegensatz zum Konzept einer Turing-Maschine kann es keinen Zustand behalten. Ich ahne, dass dieser Artikel viel zu kompliziert beginnt.

Damit es auch jede Python-Einsteigerin versteht, erkläre ich die Lambda-Funktion jetzt ganz einfach. Eine Funktion wird in Python durch das Schlüsselwort def definiert. Hier ist ein einfaches Beispiel:

>>> def summe(a, b):
...     return a + b
... 
>>> summe(1, 2)
3

Die Funktion summe erwartet die beiden Argumente a und b. Dann werden a und b addiert und an den Aufrufer der Funktion summe zurückgeliefert. Und nun das Gleiche mit lambda:

>>> x = lambda a, b : a + b
>>> print(x(3, 4))
7

Wie ihr seht, empfängt lambda Parameter (a, b), definiert hinter dem Doppelpunkt die Funktion (a + b) und liefert ein Funktionsobjekt an die Variable x zurück. Dieses kann dann mit konkreten Werten aufgerufen werden: x(3, 4).

Nun kann man sich fragen, was das soll, ist doch der Unterschied zur normalen Funktionsdefinition nicht so gross. Ein Grund, eine solche namenlose Funktion zu verwenden, ist die etwas kürzere Schreibweise. Lambda bietet sich jedoch nur für kurze Funktionen an, da es ansonsten schnell unübersichtlich wird. Der Hauptzweck von Lambda-Funktionen liegt jedoch bei der Verwendung im Zusammenhang mit Funktionen höherer Ordnung.

Erinnert ihr euch an den Artikel zur Funktion map? Map wendet eine Funktion auf eine iterierbare Datenmenge an. Statt die Funktion separat mittels def zu beschreiben, bietet sich hier eine Lambda-Funktion an. Hier ist ein Beispiel, in dem die Quadrate von Zahlen in einer Liste gebildet werden:

>>> list(map(lambda a : a**2, [1,2,3,4]))
[1, 4, 9, 16]

Da lambda ein Funktionsobjekt ist, kann es problemlos als Argument in einer anderen Funktion (hier map) eingesetzt werden.

Zum Schluss noch ein Beispiel, in dem eine zweidimensionale Liste sortiert werden soll:

>>> a = [[3,8], [1,7], [2,9]]
>>> a.sort()
>>> a
[[1, 7], [2, 9], [3, 8]]

Wie ihr seht, wird die Liste nach der ersten Dimension (1,2,3) sortiert. Was aber, wenn die Liste nach der zweiten Dimension sortiert werden soll? Dafür bietet sich eine Lambda-Funktion an:

>>> a = [[3,8], [1,7], [2,9]]
>>> b = sorted(a, key=lambda x : x[1])
>>> b
[[1, 7], [3, 8], [2, 9]]

Die Funktion sorted erwartet zwei Argumente: ein iterierbares Objekt (a) und einen Schlüssel (key) nachdem sortiert werden soll. Die verwendete Lambda-Funktion erhält in x jedes einzelne Element der Liste a und liefert die zweite Dimension x[1] als Sortierkriterium zurück.

Tags

Python, Lambda, Funktion, abstrakt

john-soda
Geschrieben von john-soda am 7. Juni 2023 um 18:23

DANKE! Liebe die Python Artikel! Bisher jedes mal gut und unterhaltsam erklärt!

Arjun Leines
Geschrieben von Arjun Leines am 8. Juni 2023 um 18:32

zip, map wollte ich schon lange mal anschauen, Kombo lambda und map sehr cool, danke!