In diesem Lernprogramm erfahren Sie alles über die Verwendung von Lambda-Funktionen in Python – von der Syntax zur Definition von Lambda-Funktionen bis hin zu den verschiedenen Anwendungsfällen mit Codebeispielen.
In Python sind Lambdas anonyme Funktionen, die eine prägnante Syntax haben und mit anderen hilfreichen eingebauten Funktionen verwendet werden können. Am Ende dieses Tutorials werden Sie gelernt haben, wie man Lambda-Funktionen definiert und wann Sie sie im Vergleich zu regulären Python-Funktionen verwenden sollten.
Fangen wir an!
Python Lambda-Funktion: Syntax und Beispiele
Hier ist die allgemeine Syntax, um eine Lambda-Funktion in Python zu definieren:
lambda parameter(s):Rückgabewert
In der obigen allgemeinen Syntax:
- lambda ist das Schlüsselwort, das Sie verwenden sollten, um eine Lambda-Funktion zu definieren, gefolgt von einem oder mehreren Parametern, die die Funktion annehmen soll.
- Ein Doppelpunkt trennt die Parameter und den Rückgabewert.
bei der Definition einer Lambda-Funktion sollten Sie darauf achten, dass der Rückgabewert durch Auswertung eines Ausdrucks berechnet wird, der sich über eine einzige Codezeile erstreckt. Sie werden dies besser verstehen, wenn wir Beispiele codieren.
Beispiele für Python-Lambda-Funktionen
Der beste Weg, Lambda-Funktionen zu verstehen, ist, damit zu beginnen, reguläre Python-Funktionen in Lambda-Funktionen umzuschreiben.
👩🏽💻 Sie können in einer Python REPL oder mit diesem Python Online-Compiler programmieren.
#1. Betrachten Sie die folgende Funktion square()
, die eine Zahl, num
, als Argument annimmt und das Quadrat der Zahl zurückgibt.
def square(num):
return num*num
Sie können die Funktion mit Argumenten aufrufen und überprüfen, ob sie korrekt funktioniert.
>>> Quadrat(9)
81
>>> Quadrat(12)
144
Sie können diesen Lambda-Ausdruck einem Variablennamen zuweisen, z.B. square1
, um die Funktionsdefinition prägnanter zu machen: square1 = lambda num: num*num
und dann die Funktion square1
mit einer beliebigen Zahl als Argument aufrufen. Wir wissen jedoch, dass Lambdas anonyme Funktionen sind, daher sollten Sie es vermeiden, sie einer Variablen zuzuweisen.
Bei der Funktion square()
ist der Parameter num
und der Rückgabewert ist num*num
. Nachdem wir diese identifiziert haben, können wir sie in den Lambda-Ausdruck einfügen und ihn mit einem Argument aufrufen, wie gezeigt:
>>> (lambda num: num*num)(2)
4
Dies ist das Konzept des Immediately Invoked Function Expression, bei dem wir eine Funktion direkt nach ihrer Definition aufrufen.
#2. Als Nächstes schreiben wir eine weitere einfache Funktion add()
um, die die Zahlen num1
und num2
annimmt und ihre Summe num1 num2
zurückgibt.
def add(zaehl1,zaehl2):
return num1 num2
Lassen Sie uns die Funktion add()
mit zwei Zahlen als Argumente aufrufen:
>>> add(4,3)
7
>>> add(12,5)
17
>>> add(12,6)
18
In diesem Fall sind num1
und num2
die beiden Parameter und der Rückgabewert ist num1 num2
.
>>> (lambda num1, num2: num1 num2)(3,7)
10
Python-Funktionen können auch Standardwerte für Parameter annehmen. Lassen Sie uns die Definition der Funktion add()
ändern und den Standardwert des Parameters num2
auf 10 setzen.
def add(zaehl1, zaehl2=10):
return num1 num2
In den folgenden Funktionsaufrufen:
- Im ersten Funktionsaufruf ist der Wert von
num1
gleich 1 und der Wert vonnum2
gleich 3. Wenn Sie im Funktionsaufruf den Wert fürnum2
übergeben, wird dieser Wert verwendet; die Funktion gibt 4 zurück.
- Wenn Sie jedoch nur ein Argument übergeben
(num1
ist 7), wird der Standardwert von 10 fürnum2
verwendet; die Funktion gibt 17 zurück.
>>> add(1,3)
4
>>> add(7)
17
Wenn Sie Funktionen schreiben, die Standardwerte für bestimmte Parameter als Lambda-Ausdrücke übernehmen, können Sie den Standardwert bei der Definition der Parameter angeben.
>>> (lambda num1, num2 = 10: num1 num2)(1)
11
Wann sollten Sie Lambda-Funktionen in Python verwenden?
Nachdem Sie nun die Grundlagen der Lambda-Funktionen in Python kennengelernt haben, hier ein paar Anwendungsfälle:
- Wenn Sie eine Funktion haben, deren Rückgabeausdruck aus einer einzigen Codezeile besteht und Sie die Funktion nicht an anderer Stelle im gleichen Modul referenzieren müssen, können Sie Lambda-Funktionen verwenden. Wir haben auch ein paar Beispiele codiert, um dies zu verstehen.
- Sie können Lambda-Funktionen verwenden, wenn Sie integrierte Funktionen wie map(), filter() und reduce() einsetzen.
- Lambda-Funktionen können bei der Sortierung von Python-Datenstrukturen wie Listen und Wörterbüchern hilfreich sein.
Wie Sie Python Lambda mit eingebauten Funktionen verwenden
#1. Verwendung von Lambda mit Map()
Die Funktion map()
nimmt eine Iterable und eine Funktion auf und wendet die Funktion auf jedes Element in der Iterable an, wie gezeigt:
Wir erstellen eine Liste nums
und verwenden die Funktion map()
, um eine neue Liste zu erstellen, die das Quadrat jeder Zahl in der Liste nums
enthält. Beachten Sie die Verwendung der Lambda-Funktion, um die Quadrierungsoperation zu definieren.
>>> nums = [4,5,6,9]
>>> list(map(lambda num:num*num,nums))
[16, 25, 36, 81]
Da die Funktion map()
ein map-Objekt zurückgibt, sollten wir es in eine Liste umwandeln.
▶️ Sehen Sie sich dieses Tutorial über die map-Funktion von Python an.
#2. Verwendung von Lambda mit Filter()
Lassen Sie uns nums
, eine Liste von Zahlen, definieren:
>>> nums = [4,5,6,9]
Nehmen wir an, Sie möchten diese Liste filtern und nur die ungeraden Zahlen beibehalten.
Dazu können Sie die integrierte Funktion filter()
von Python verwenden.
Die Funktion filter()
nimmt eine Bedingung und eine Iterable auf: filter(Bedingung, Iterable)
. Das Ergebnis enthält nur die Elemente in der ursprünglichen Iterablen, die die Bedingung erfüllen. Sie können das zurückgegebene Objekt in eine Python-Iterable wie z.B. list umwandeln.
Um alle geraden Zahlen herauszufiltern, behalten wir nur die ungeraden Zahlen bei. Der Lambda-Ausdruck sollte also lauten lambda num: num%2!=0
. Die Menge num%2
ist der Rest, wenn num
durch 2 geteilt wird.
num%2!=0
istTrue
, wennnum
ungerade ist, undnum%2!=0
istFalsch
, wennnum
gerade ist.
>>> nums = [4,5,6,9]
>>> list(filter(lambda zaehler:zaehler%2!=0,zaehler))
[5, 9]
#3. Verwendung von Lambda mit Reduce()
Die Funktion reduce()
nimmt eine Iterable und eine Funktion auf. Sie reduziert die Iterable, indem sie die Funktion iterativ auf die Elemente der Iterable anwendet.
Um die Funktion reduce()
zu verwenden, müssen Sie sie aus dem in Python integrierten Modul functools
importieren:
>>> from functools import reduce
Lassen Sie uns die Funktion reduce() verwenden, um die Summe aller Zahlen in der Liste nums zu berechnen. Wir definieren einen Lambda-Ausdruck: lambda num1,num2:num1 num2
, als reduzierende Summenfunktion.
Die Reduktionsoperation wird wie folgt ablaufen: f(f(f(4,5),6),9) = f(f(9,6),9) = f(15,9) = 24. Hier ist f die Summierungsoperation für zwei Elemente der Liste, definiert durch die Lambda-Funktion.
>>> from functools import reduce
>>> nums = [4,5,6,9]
>>> reduce(lambda zaehl1,zaehl2:zaehl1 zaehl2,zaehl)
24
Wenn Sie sich nicht sicher sind, was Summen sind, können Sie hier nachlesen, wie Sie die Summenfunktion von Python verstehen.
Python Lambda-Funktionen zum Anpassen der Sortierung
Sie können Lambda-Funktionen nicht nur mit eingebauten Python-Funktionen wie map()
, filter()
und reduce()
verwenden, sondern auch, um die eingebauten Funktionen und Methoden für die Sortierung anzupassen.
#1. Sortieren von Python-Listen
Wenn Sie mit Python-Listen arbeiten, müssen Sie diese oft nach bestimmten Kriterien sortieren. Um Python-Listen an Ort und Stelle zu sortieren, können Sie die eingebaute sort()
-Methode auf sie anwenden. Wenn Sie eine sortierte Kopie der Liste benötigen, können Sie die Funktion sorted()
verwenden.
Die Syntax zur Verwendung der Python-Funktion
sorted()
lautetsorted(iterable, key=...,reverse= True | False)
.
– Der Parameterkey
wird verwendet, um die Sortierung anzupassen.
– Der Parameterreverse
kann aufTrue
oderFalse
gesetzt werden; der Standardwert istFalse
.
Beim Sortieren von Listen mit Zahlen und Zeichenketten wird standardmäßig in aufsteigender bzw. alphabetischer Reihenfolge sortiert. Es kann jedoch vorkommen, dass Sie ein eigenes Kriterium für die Sortierung festlegen möchten.
Betrachten Sie die folgende Liste Früchte
. Angenommen, Sie möchten eine sortierte Kopie der Liste erhalten. Sie sollten die Zeichenketten nach der Anzahl der Vorkommen von ‘p’ in ihnen sortieren – in absteigender Reihenfolge.
>>> fruits = ['apple','pineapple','grapes','mango']
Jetzt ist es an der Zeit, den optionalen Parameter key
zu verwenden. Eine Zeichenkette ist in Python eine Iterable und um die Anzahl der Vorkommen eines Zeichens in ihr zu ermitteln, können Sie die eingebaute Methode .count()
verwenden. Also setzen wir den Schlüssel
auf lambda x:x.count('p')
, so dass die Sortierung auf der Anzahl des Vorkommens von ‘p’ in der Zeichenkette basiert.
>>> fruits = ['apple','pineapple','grapes','mango']
>>> sorted(fruits,key=lambda x:x.count('p'),reverse=True)
['Ananas', 'Apfel', 'Weintrauben', 'Mango']
In diesem Beispiel:
- Der
Schlüssel
, nach dem sortiert werden soll, ist die Anzahl der Vorkommen des Zeichens ‘p’, und er ist als Lambda-Ausdruck definiert. - Da wir den Parameter
reverse
aufTrue
gesetzt haben, erfolgt die Sortierung in der absteigenden Reihenfolge der Anzahl der Vorkommen von ‘p’.
In der Liste der Früchte
enthält ‘Ananas’ 3 Vorkommen von ‘p’ und die Zeichenketten ‘Apfel’, ‘Weintrauben’ und ‘Mango’ enthalten 2, 1 bzw. 0 Vorkommen von ‘p’.
Stabile Sortierung verstehen
Betrachten Sie ein anderes Beispiel. Für dasselbe Sortierkriterium haben wir die Liste der Früchte
neu definiert. Hier kommt ‘p’ in den Zeichenketten ‘Apfel’ und ‘Weintrauben’ zweimal bzw. einmal vor. Und in den Zeichenketten ‘mango’ und ‘melon’ kommt es nie vor.
>>> Früchte = ['Mango','Apfel','Melone','Weintrauben']
>>> sortiert(fruits,key=lambda x:x.count('p'),reverse=True)
['Apfel', 'Weintrauben', 'Mango', 'Melone']
In der Ausgabeliste steht ‘Mango’ vor ‘Melone’, obwohl beide nicht das Zeichen ‘p’ enthalten. Aber warum ist dies der Fall? Die Funktion sorted()
führt eine stabile Sortierung durch. Wenn also die Anzahl von ‘p’ bei zwei Zeichenketten gleich ist, bleibt die Reihenfolge der Elemente in der ursprünglichen Obstliste
erhalten.
Als kurze Übung tauschen Sie die Positionen von ‘Mango’ und ‘Melone’ in der
Obstliste
aus, sortieren die Liste nach demselben Kriterium und beobachten die Ausgabe.
▶️ Erfahren Sie mehr darüber, wie man Listen in Python sortiert.
#2. Sortieren eines Python-Wörterbuchs
Sie können Lambdas auch beim Sortieren von Python-Wörterbüchern verwenden. Betrachten Sie das folgende Wörterbuch price_dict
, das Artikel und deren Preise enthält.
>>> price_dict = {
... 'Milch':10,
... 'Honig':15,
... 'Brot':7,
... 'Süßigkeiten':3
... }
Um die Schlüssel-Wert-Paare eines Wörterbuchs als eine Liste von Tupeln zu erhalten, können Sie die eingebaute Wörterbuchmethode .items()
verwenden:
>>> price_dict_items = price_dict.items()
dict_items([('Milch', 10), ('Honig', 15), ('Brot', 7), ('Süßigkeiten', 3)])
In Python folgen alle Iterablen: Listen, Tupel, Strings und mehr, der Null-Indexierung. Das erste Element steht also bei Index 0, das zweite Element bei Index 1 und so weiter.
Wir möchten nach dem Wert sortieren, d.h. nach dem Preis der einzelnen Artikel im Wörterbuch. In jedem Tupel in der Liste price_dict_items
ist das Element bei Index 1 der Preis. Also setzen wir den Schlüssel
auf lambda x:x<x>[1]</x>
, um das Wörterbuch nach dem Element mit dem Index 1, dem Preis, zu sortieren.
>>> dict(sorted(preis_dict_items,key=lambda x:x[1]))
{'Süßigkeiten': 3, 'Brot': 7, 'Milch': 10, 'Honig': 15}
In der Ausgabe wurden die Wörterbucheinträge in aufsteigender Reihenfolge der Preise sortiert: beginnend mit ‘Candy’, mit einem Preis von 3 Einheiten, bis zu ‘Honey’, mit einem Preis von 15 Einheiten.
▶️ Wenn Sie mehr erfahren möchten, lesen Sie diese ausführliche Anleitung zum Sortieren von Wörterbüchern nach Schlüssel und Wert in Python.
Resümee
Und da haben Sie es! Sie haben gelernt, wie man Lambda-Funktionen definiert und sie effektiv mit anderen eingebauten Python-Funktionen verwendet. Hier ist eine Zusammenfassung der wichtigsten Erkenntnisse:
- In Python sind Lambdas anonyme Funktionen, die mehrere Argumente entgegennehmen und einen Wert zurückgeben können; der Ausdruck, der ausgewertet wird, um diesen Rückgabewert zu erzeugen, sollte aus einer Zeile Code bestehen. Sie können verwendet werden, um kleine Funktionsdefinitionen prägnanter zu gestalten.
- Um die Lambda-Funktion zu definieren, können Sie die Syntax: Lambda Parameter: Rückgabewert verwenden.
- Einige der wichtigsten Anwendungsfälle sind die Verwendung mit den Funktionen
map()
,filter()
undreduce()
sowie als Schlüsselparameter zur Anpassung der Sortierung von Python-Iterablen.
Viel Spaß beim Programmieren!