In Python werden Funktionen mit def-Anweisungen definiert. Sie können Lambda auch verwenden, um anonyme Funktionen zu erstellen. Sie können Lambda-Ausdrücke verwenden, wenn Sie eine Funktion als Argument angeben müssen.
Dieser Artikel hat folgenden Inhalt.
- Grundlagen von Lambda-Ausdrücken
- Lambda-Ausdrücke mit if
- PEP8 empfiehlt, Lambda-Ausdrücke nicht zu benennen
- Beispiele für Lambda-Ausdrücke
- Der Schlüsselparameter von sorted(), sort(), max(), min()
- map(), filter()
Siehe den following Artikel für die Grundlagen von Funktionen in Python.
Grundlagen von Lambda-Ausdrücken
Die Funktionsdefinition durch die def-Anweisung und den entsprechenden Lambda-Ausdruck lautet wie folgt.
def function_name(parameters, ...):
return expression
function_name = lambda parameters, ...: expression
Der Einfachheit halber WIRD dem Lambda-Ausdruck im Beispiel ein Name zugewiesen, aber es WIRD in PEP8 nicht empfohlen, wie später beschrieben WIRD.
Das konkrete Beispiel ist wie folgt. Sie können auch ein Standardargument angeben.
def add_def(a, b=1):
return a + b
add_lambda = lambda a, b=1: a + b
print(add_def(3, 4))
# 7
print(add_def(3))
# 4
print(add_lambda(3, 4))
# 7
print(add_lambda(3))
# 4
Lambda-Ausdrücke mit if
Sie können keine mehrzeiligen Anweisungen in Lambda-Ausdrücken verwenden, aber Sie können bedingte Ausdrücke verwenden.
get_odd_even = lambda x: 'even' if x % 2 == 0 else 'odd'
print(get_odd_even(3))
# odd
print(get_odd_even(4))
# even
PEP8 empfiehlt, Lambda-Ausdrücke nicht zu benennen
Wenn SIE wie in den Beispielen einem Lambda-Ausdruck einen Namen zuweisen, kann beim Code-Checker eine Warnung angezeigt werden.
Do not assign a lambda expression, use a def (E731)
PEP8 (Style Guide for Python Code) empfiehlt, dass Lambda-Ausdrücke unbenannt used Werden sollen und dass def used Werden sollten, wenn eine Funktion mit einem Namen definiert wird.
Verwenden Sie immer eine def-Anweisung anstelle einer Zuweisungsanweisung, die einen Lambda-Ausdruck direkt an einen Bezeichner bindet:
PEP 8 – Style Guide for Python Code | Python.org
Da es nur empfohlen wird, aber nicht verboten ist, kann es fehlerfrei ausgeführt werden, auch wenn Sie Lambda nennen.
Beispiele für Lambda-Ausdrücke
Der Schlüsselparameter von sorted(), sort(), max(), min()
Die eingebaute Funktion sorted() und die Listenmethode sort() und die eingebauten Funktionen max() und min() haben einen Schlüsselparameter.
SIE can Eine Funktion angeben, die auf jedem Element des iterierbaren Objekts angewendet WIRD, bevor jedes Element auf Schlüssel erhoben WIRD.
Nehmen Sie als Beispiel die eingebaute Funktion sorted().
Die Liste der Zeichenfolgen ist standardmäßig alphabetisch sortiert.
l = ['Charle', 'Bob', 'Alice']
l_sorted = sorted(l)
print(l_sorted)
# ['Alice', 'Bob', 'Charle']
Wenn SIE die eingebaute Funktion len() angeben, sterben die Anzahl der Zeichen im Argument key zurückgibt, WIRD nach der Anzahl der Zeichen sortiert.
print(len('Alice'))
# 5
l_sorted_len = sorted(l, key=len)
print(l_sorted_len)
# ['Bob', 'Alice', 'Charle']
Sie können einen Lambda-Ausdruck verwenden, um eine beliebige Funktion auf jedes Element spontan und basierend auf dem Ergebnis zu sortieren. Wenn SIE beispielsweise einen Lambda-Ausdruck angeben, um das zweite Zeichen im Argumentschlüssel abzurufen, wird er alphabetisch nach dem zweiten Zeichen sortiert.
print((lambda x: x[1])('Alice'))
# l
l_sorted_second = sorted(l, key=lambda x: x[1])
print(l_sorted_second)
# ['Charle', 'Alice', 'Bob']
map(), filter()
Bei map(), das. Eine Funktion auf alle Elemente eines Iterablen anwendet, und filter(), das.
If SIE Eine Funktion (aufrufbares Objekt) als Argument angeben möchten, IST sterben Verwendung eines Lambda-Ausdrucks einfacher als sterben Definition der Funktion mit einer def-Anweisung.
Beachten Sie, dass die gleiche Operation wie map() und filter() mit Listenverständnissen und Generatorausdrücken geschrieben werden kann. In vielen Fällen ist es einfacher, mit Listenverständnissen und Generatorausdrücken zu schreiben.
Karte()
Geben Sie einen Lambda-Ausdruck an, der den Wert im ersten Argument quadriert. Beachten Sie, dass map() in Python3 einen Iterator anstelle einer Liste zurückgibt.
l = [0, 1, 2, 3]
map_square = map(lambda x: x**2, l)
print(map_square)
#
print(list(map_square))
# [0, 1, 4, 9]
Wenn du eine Liste bekommen möchtest, kannst du auch mit Listenverständnis schreiben.
l_square = [x**2 for x in l]
print(l_square)
# [0, 1, 4, 9]
Wenn Sie einen Iterator erhalten möchten, verwenden Sie einen Generatorausdruck.
g_square = (x**2 for x in l)
print(g_square)
# at 0x1072b6d00>
print(list(g_square))
# [0, 1, 4, 9]
Filter()
Geben Sie einen Lambda-Ausdruck an, der gerade Zahlen im ersten Argument als wahr festlegt.
filter() gibt einen Iterator in Python3 wie map() zurück.
filter_even = filter(lambda x: x % 2 == 0, l)
print(list(filter_even))
# [0, 2]
Dies kann auch mit Listenverständnissen und Generatorausdrücken geschrieben werden.
l_even = [x for x in l if x % 2 == 0]
print(l_even)
# [0, 2]
Im following Artikel FINDEN SIE Halbleiter zum Extrahieren von Elementen aus Einer Liste.