Wenn Sie Lambda hören, denken Sie vielleicht an AWS Lambda. Dieses Mal spreche ich von Lambda, was in Python eine anonyme Funktion bedeutet.
Kurz gesagt, Sie können eine Funktion definieren, ohne eine def-Anweisung zu verwenden.
Ich denke, dass die def-Anweisung die folgende Struktur hat.
def function(Streit):
Ausdruck zurückgeben
In Lambda kann es wie folgt beschrieben werden.
function =Lambda-Argument:Formel
Beschreibt die Verwendung dieses Lambda.
Zunächst möchte ich ein Programm mit einer def-Anweisung schreiben, ohne Lambda zu verwenden. Bereiten Sie eine Liste mit unteren und oberen Alphabeten als Inhalt vor. Sie können die Funktion "Großschreibung" verwenden, um sie in Großbuchstaben zu korrigieren.
l = ['A', 'b', 'C', 'd', 'e', 'F', 'g']
def change_words(words, func):
for word in words:
print(func(word))
def sample_func(word):
return word.capitalize()
change_words(l, sample_func)
In der Funktion change_words
Das Argument ist auf func gesetzt, wodurch Wörter und Funktionen übergeben werden.
Während des Prozesses werden Wörter in eine for-Schleife umgewandelt und der Wert in func () eingegeben.
Der Inhalt besteht darin, das Wort gemäß der Definition von func zu ändern.
In der Funktion "sample_func" Es nimmt das Wort als Argument und darin steht der Anfang der Zeichenkette groß () Es ist ein Prozess wie die Rückkehr mit einer Methode zur Kapitalisierung.
Wenn Sie es tatsächlich ausführen, können Sie sehen, dass es in Großbuchstaben ausgegeben wird.
A
B
C
D
E
F
G
lambda Schreiben wir das obige Programm mit Lambda.
l = ['A', 'b', 'C', 'd', 'e', 'F', 'g']
def change_words(words, func):
for word in words:
print(func(word))
#def sample_func(word):
# return word.capitalize()
sample_func = lambda word: word.capitalize()
change_words(l, sample_func)
Es ist möglich, in einer Zeile wie dieser zu schreiben. Wenn Sie es versuchen, erhalten Sie das gleiche Ergebnis.
Diesmal aus Gründen der Klarheit der Lambda-Ausdruck Ich nannte es "sample_func",
Python-Codierungskonvention PEP8 Es wird empfohlen, def zu verwenden, wenn eine Funktion mit einem Namen definiert wird.
Daher ist es möglich, es direkt zu schreiben und als Funktion zu übergeben, ohne ihm einen Namen zu geben.
l = ['A', 'b', 'C', 'd', 'e', 'F', 'g']
def change_words(words, func):
for word in words:
print(func(word))
# def sample_func(word):
# return word.capitalize()
# sample_func = lambda word: word.capitalize()
change_words(l, lambda word: word.capitalize())
Mit dieser Beschreibung können Sie die Funktion verwenden, ohne sie einzeln zu definieren. Ich denke, es wird ein schönes Programm.
Fügen wir nun eine Funktion hinzu, die das Alphabet auf niedrigere Ränge korrigiert.
Schreiben wir es zuerst mit einer def-Anweisung.
l = ['A', 'b', 'C', 'd', 'e', 'F', 'g']
def change_words(words, func):
for word in words:
print(func(word))
def sample_func(word):
return word.capitalize()
def sample_func2(word):
return word.lower()
change_words(l, sample_func)
change_words(l, sample_func2)
Eine neue Funktion mit dem Namen "sample_func2" wurde hinzugefügt.
Wenn Sie es tatsächlich ausführen, werden auch niedrigere Alphabete ausgegeben.
A
B
C
D
E
F
G
a
b
c
d
e
f
g
Der Inhalt der Funktion "sample_func2" Ich habe gerade "capitalize ()" in "lower ()" geändert.
Es ist jedoch mühsam, jede Funktion definieren und dann schreiben zu müssen.
lambda Daher ist es einfacher, mit Lambda in einer Zeile zu schreiben.
l = ['A', 'b', 'C', 'd', 'e', 'F', 'g']
def change_words(words, func):
for word in words:
print(func(word))
change_words(l, lambda word: word.capitalize())
change_words(l, lambda word: word.lower())
Selbst wenn Sie dies ausführen, wird das gleiche Ergebnis ausgegeben.
Wenn die Funktion als Argument verwendet wird, kann sie in () mit Lambda definiert werden. Weil Sie mit def keine Funktion definieren müssen Es ermöglicht das Schreiben sehr effizienter Programme.
Im Folgenden wurde der Inhalt Ihrer Kommentare im Artikel wiedergegeben.
Kombinieren Sie das oben beschriebene Lambda mit der integrierten Funktionskarte und dem Filter Es wird effizienter zu bedienen sein.
Verwenden wir hier die Kartenfunktion.
Wenn tatsächlich mit Karte kombiniert
Inhalt, der das Wort gemäß der Definition von func ändert
Die Funktion change_words
muss nicht mehr in def definiert werden.
l = ['A', 'b', 'C', 'd', 'e', 'F', 'g']
change_words = map(lambda c: c.capitalize(), l)
print(list(change_words)
Bisher haben wir erklärt, wie man mit Lambdas und Karten umgeht. Das Buch Effective Python empfiehlt die Verwendung der Listeneinschlussnotation anstelle dieser. (* Einzelheiten finden Sie unter Punkt 7 auf Seite 15.)
Das folgende Programm wird verwendet, wenn die Listeneinschlussnotation verwendet wird.
l = ['A', 'b', 'C', 'd', 'e', 'F', 'g']
change_words = [c.capitalize() for c in l]
print(change_words)
In meinem Buch gibt es zwei Hauptgründe für die Empfehlung der Notation zur Aufnahme von Listen.
Die Listeneinschlussnotation verwendet zusätzliche Lambda-Ausdrücke im Vergleich zur integrierten Funktionszuordnung und zum Filter Es soll klar sein, weil es nicht benötigt wird.
Selbst wenn Sie sich das obige Programm ansehen, ist die Notation der Listeneinbeziehung sicherlich besser Es sieht ordentlich aus und ich denke, es ist leicht zu beschreiben.
Angenommen, Sie möchten nur Großbuchstaben "B" aus einer Liste ausgeben.
In der Listeneinschlussnotation ist es möglich, einfach eine bedingte Anweisung nach der Schleife hinzuzufügen.
l = ['A', 'b', 'C', 'd', 'e', 'F', 'g']
change_words = [c.capitalize() for c in l if c == 'b']
print(change_words)
Im Fall einer Karte kann sie jedoch nicht ohne die Hilfe eines Filters beschrieben werden.
l = ['A', 'b', 'C', 'd', 'e', 'F', 'g']
change_words = map(lambda c: c.capitalize(), filter(lambda c: c == 'b', l))
print(list(change_words))
Sie können es mit Filter tun, aber es ist kein sehr gut lesbares Programm.
Unter den oben genannten Gesichtspunkten wird gesagt, dass die Notation der Listeneinbeziehung besser ist als Karte und Filter.
Anfangs war der Leitfaden nur für Lambda, aber nachdem er Kommentare erhalten hatte, Ich konnte mich mit der Notation von Karten, Filtern und sogar Listeneinschlüssen befassen. Vielen Dank.
Recommended Posts