Wie benutzt man Python Lambda?

Einführung

Wenn Sie Lambda hören, denken Sie vielleicht an AWS Lambda. Dieses Mal spreche ich von Lambda, was in Python eine anonyme Funktion bedeutet.

Was ist Python Lambda?

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

Wie benutzt man

Beschreibt die Verwendung dieses Lambda.

def Aussage

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.

Es ist besser, dem Lambda-Ausdruck keinen Namen zu geben

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.

Effektiver

Fügen wir nun eine Funktion hinzu, die das Alphabet auf niedrigere Ränge korrigiert.

def Aussage

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.

Nachtrag

Im Folgenden wurde der Inhalt Ihrer Kommentare im Artikel wiedergegeben.

Kombinieren wir mit Karte und Filter

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)

Verwenden Sie so oft wie möglich die Listeneinschlussnotation

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.

Das erste ist die Lesbarkeit.

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.

Zweitens erleichtert die Notation der Listeneinbeziehung das Extrahieren von Elementen aus der Eingabeliste.

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.

abschließend

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

Wie benutzt man Python Lambda?
python3: Verwendung der Flasche (2)
[Python] Verwendung von Liste 1
Python: Wie man pydub benutzt
[Python] Verwendung von checkio
[Python] Verwendung von input ()
[Python] Verwendung von virtualenv
python3: Verwendung der Flasche (3)
python3: Wie man eine Flasche benutzt
Verwendung von Python-Bytes
Python: So verwenden Sie Async mit
[Python] Verwendung der Pandas-Serie
Wie man MySQL mit Python benutzt
Verwendung der Python-API von OpenPose
Verwendung von ChemSpider in Python
Verwendung von PubChem mit Python
Verwendung der Zip-Funktion von Python
[Python] Verwendung der Typetalk-API
Verwendung von xml.etree.ElementTree
Wie benutzt man Python-Shell
[Python] Zusammenfassung der Verwendung von Pandas
[Einführung in Python] Wie verwende ich eine Klasse in Python?
Hinweise zur Verwendung von tf.data
Verwendung von virtualenv
Wie benutzt man Seaboan?
Verwendung von Image-Match
So installieren Sie Python
Verwendung von Pandas 2
So installieren und verwenden Sie pandas_datareader [Python]
Verwendung von Virtualenv
Verwendung von pytest_report_header
[Python] Verwendung von __command__, Funktionserklärung
So installieren Sie Python
Wie man Bio.Phylo benutzt
Verwendung von SymPy
[Python] Verwendung von import sys sys.argv
Wie man x-means benutzt
Verwendung von WikiExtractor.py
Verwendung von IPython
Memorandum über die Verwendung von Gremlin Python
Verwendung von virtualenv
[Python2.7] Zusammenfassung der Verwendung von unittest
Wie benutzt man Matplotlib?
Zugriff auf RDS von Lambda (Python)
Verwendung von iptables
Python: Verwendung von Einheimischen () und Globalen ()
Wie benutzt man numpy?
Verwendung von __slots__ in der Python-Klasse
Verwendung von TokyoTechFes2015
Wie benutzt man venv
Verwendung des Wörterbuchs {}
Wie benutzt man Pyenv?
Verwendung von "deque" für Python-Daten
Wie man Python-Kabusapi benutzt
Verwendung von Python zip und Aufzählung
Zusammenfassung der Verwendung der Python-Liste
[Road to Intermediate Python] Verwenden Sie Lambda-Ausdrücke
Verwendung regulärer Ausdrücke in Python
Verwendung von return