Betreff: Python Lambda ist nutzlos ^ H ^ H ^ H ^ H ^ H Schwer zu bedienen

Als Antwort auf den Artikel von @buchio Python Lambda ist nutzlos ^ H ^ H ^ H ^ H ^ H schwer zu verwenden schauen.

Warum das passiert ist

Es ist leicht, die lokale Variable zu verstehen, wenn Sie glauben, dass der Bereich dahinter reserviert ist. Die Referenz im Lambda ist die Fläche, nicht der Wert der Variablen (sichtbar zum Zeitpunkt der Definition). Mit anderen Worten, test1 im Originalartikel entspricht dem folgenden Code.

>>> def test1_aux():
...     env = [None]
...     funcs = []
...     for i in range(10):
...         env[0] = i
...         funcs.append(lambda a: a+env[0])
...     return funcs
... 
>>> print [f(10) for f in test1_aux()]
[19, 19, 19, 19, 19, 19, 19, 19, 19, 19]

Die Tatsache, dass der Umfang der Variablen i nicht auf das Innere der for-Anweisung beschränkt ist, ist sicherlich etwas verwirrend, aber ich denke nicht, dass daran etwas Seltsames ist.

Übrigens können für die Listeneinschlussnotation, die eng mit der for-Anweisung verwandt ist, Variablen aus dem äußeren Bereich von Python 3 nicht mehr referenziert werden.

python2


>>> [x for x in range(3)]
[0, 1, 2]
>>> x
2

python3


>>> [x for x in range(3)]
[0, 1, 2]
>>> x
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'x' is not defined

Was soll ich machen

In Python können Sie es aufrufen, indem Sie die Methode \ _ \ _ call \ _ \ _ in einer beliebigen Klasse implementieren. So können Sie das Objekt dort verwenden, wo Sie den Verschluss benötigen.

>>> class Adder(object):
...     def __init__(self, i):
...         self.i = i
...     def __call__(self, a):
...         return a + self.i
... 
>>> def test_callable():
...     funcs = []
...     for i in range(10):
...         funcs.append(Adder(i))
...     return funcs
... 
>>> print [f(10) for f in test_callable()]
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

In Python ist die Verwendung von Funktionen und Objekten besser lesbar und einfacher. Daher ist es besser, Lambdas für andere Zwecke als für einfache Ausdrücke zu verwenden.

Recommended Posts

Betreff: Python Lambda ist nutzlos ^ H ^ H ^ H ^ H ^ H Schwer zu bedienen
Wie benutzt man Python Lambda?
[Road to Intermediate Python] Verwenden Sie Lambda-Ausdrücke
Verwendung ist und == in Python
Zusammenfassung des Studiums von Python zur Verwendung von AWS Lambda
Erstellen eines Python-Tools zur Dokumentgenerierung, da die Verwendung von Sphinx schwierig ist
python3: Verwendung der Flasche (2)
[Python] Verwendung von Liste 1
Python ist schmerzhaft. Aber benutze
Wie benutzt man Python Argparse?
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] Ich möchte die Option -h mit argparse verwenden
[Einführung in die Udemy Python3 + -Anwendung] 58. Lambda
Python: So verwenden Sie Async mit
Golang ist schwer zu übersetzen. .. .. (Teil 1)
Verwenden Sie Stoff wie in Python (Stoff3)
[Python] Verwendung der Pandas-Serie
Verwendung von Anfragen (Python Library)
Verwendung von SQLite in Python
[Lambda] [Python] Von Lambda auf Twitter posten!
Grundlegende Grammatik des Python3-Systems (Verwendung von Funktionen, Schließung, Lambda-Funktion)
Verwendung von Sternchen (*) in Python. Vielleicht ist das alles? ..
[Einführung in Python] Verwenden wir Pandas
[Python] Verwendung von Liste 3 Hinzugefügt
Wie man MySQL mit Python benutzt
Verwendung der Python-API von OpenPose
Verwendung von ChemSpider in Python
Python: Verwendung von pydub (Wiedergabe)
[Einführung in Python] Verwenden wir Pandas
Verwendung der Zip-Funktion von Python
Verwenden Sie PostgreSQL mit Lambda (Python + psycopg2)
[Einführung in Python] Verwenden wir Pandas
[Python] Verwendung der Typetalk-API
Wenn Sie es so verwenden möchten, wie es ist, wenn Sie es mit Lambda-Memo verwenden
Bequem zum Verwenden von Ebenen beim Laden von Bibliotheken auf Lambda
[Python] Zusammenfassung der Verwendung von Pandas
[Einführung in Python] Wie verwende ich eine Klasse in Python?
Verwenden Sie print in Python2 lambda expression
Wird nicht empfohlen, pip direkt zu verwenden?
[Road to Intermediate Python] Verwenden Sie ternäre Operatoren
So installieren und verwenden Sie pandas_datareader [Python]
[Pandas] Was ist set_option?
[Python] Verwendung von __command__, Funktionserklärung
Ich möchte ein Glas aus Python verwenden
[Einführung in Python] Verwenden wir foreach mit Python
[Python] Verwendung von import sys sys.argv
Einfache Möglichkeit, Wikipedia mit Python zu verwenden
[Python] Organisieren der Verwendung für Anweisungen
Lambda-Funktion zur Erstellung eines AMI-Backups (Python)
Python: Verwendung von Einheimischen () und Globalen ()
Installieren Sie Python auf xserver, um pip zu verwenden
Verwendung von "deque" für Python-Daten
Verwendung von Python zip und Aufzählung
[Python] Verstehen, wie rekursive Funktionen verwendet werden