Seien Sie vorsichtig, wenn Sie den Standardargumentwert in der Python 3-Serie angeben

Memo von P115 von http://www.amazon.co.jp/dp/4873117380

Beim Definieren einer Python-Funktion können Sie einen Standardwert für das Argument festlegen. Der Wert des Standardwerts wird jedoch berechnet, wenn </ b> definiert, und nicht, wenn die Funktion ausgeführt wird. ..

Wenn Sie die Funktion wie folgt definieren, ist die Liste daher nicht leer und der Wert zum Zeitpunkt des vorherigen Aufrufs bleibt nach dem zweiten Mal erhalten.

In [32]: def buggy(arg, result=[]):
   ....:     result.append(arg)
   ....:     print(result)
   ....:

In [33]: buggy('a')
['a']

In [34]: buggy('b')
['a', 'b']

Es ist so weit wie möglich, Fehler zu vermeiden, indem unveränderliche Standardwerte angegeben werden.

Es gibt verschiedene Möglichkeiten, dies zu vermeiden. Machen Sie jedoch beispielsweise deutlich, dass es sich um den ersten Aufruf handelt.

In [35]: def nonbuggy(arg, result=None):
   ....:     if result is None:
   ....:         result = []
   ....:     result.append(arg)
   ....:     print(result)
   ....:
In [36]: nonbuggy('a')
['a']

In [37]: nonbuggy('b')
['b']

Recommended Posts

Seien Sie vorsichtig, wenn Sie den Standardargumentwert in der Python 3-Serie angeben
Rufen Sie den Wert ab, während Sie den Standardwert aus dict in Python angeben
Der Zeitpunkt, zu dem der Wert des Standardarguments ausgewertet wird, unterscheidet sich zwischen Ruby und Python.
Wann werden die Standardargumente in Python gebunden? Wenn die Variable im Abschluss gebunden ist, wird die Auswertung verschoben.
Den Typ mit Python beherrschen? (Wann ist eine Typprüfung durchzuführen?)
[Python] Seien Sie vorsichtig, wenn Sie Druck verwenden
Was tun, wenn der Werttyp in Python nicht eindeutig ist?
Wenn Sie mehrere Schlüssel in Python-Sortierung angeben
⚠️ Achten Sie auf die Standardargumentwerte von Python ⚠️
Machen Sie den Standardwert des Arguments unveränderlich
Finden Sie den Bruchteil des in Python eingegebenen Werts heraus
Gibt es keinen Standardwert im Wörterbuch?
[pandas] Wenn Sie die Standardindexbezeichnung in der at-Methode angeben, ist "" nicht erforderlich
Python Hinweis: Wenn der Befehl pip nicht verwendet werden kann
So rufen Sie den n-ten größten Wert in Python ab
Python-Standardargumentfalle
Grundeinstellungen bei Verwendung der foursquare-API mit Python
Seien Sie vorsichtig, wenn Sie die Eigenvektoren einer Matrix unterscheiden
Python-Standardargumentverhalten
Machen Sie den Standardwert des Arguments unveränderlich (Artikelerklärung)
Hinweis: Bedeutung der Angabe von nur * (Sternchen) als Argument in der Funktionsdefinition von Python
Rufen Sie den im Pulldown-Menü Selenium Python VBA ausgewählten Wert ab
Der Wert von meta beim Angeben einer Funktion ohne Rückgabewert mit Dask dataframe gilt
Wenn sich eine Zeichenfolge einer bestimmten Reihe im Schlüssel des Wörterbuchs befindet, wird die Zeichenfolge in den Wert des Wörterbuchs konvertiert.
Effektives Python-Hinweiselement 20 Verwenden Sie None und die Dokumentationszeichenfolge, wenn Sie dynamische Standardargumente angeben
Code, der bei AttributeError Standardwerte festlegt
Lösung, wenn das Bild mit tkinter [python] nicht angezeigt werden kann
Seien Sie vorsichtig, wenn Sie pandas.DataFrame Series als Spalte zuweisen
So erhalten Sie den letzten (letzten) Wert in einer Liste in Python
Lösen Sie das japanische Problem, wenn Sie das CSV-Modul in Python verwenden.
Skripte, die bei der Verwendung von Bottle in Python verwendet werden können
[Einführung in Udemy Python3 + Application] 51. Seien Sie vorsichtig mit Standardargumenten
Finde Fehler in Python
Berechnung des Scherspielwerts in Python
Achtung bei os.mkdir in Python
Ein einfacher Grund, warum der Rückgabewert von round (2.675,2) in Python 2,67 beträgt (in Wirklichkeit sollte er 2,68 betragen ...)
Dinge, auf die Sie achten müssen, wenn Sie Standardargumente in Python verwenden
Achten Sie beim Drucken von Japanisch mit Python 3 auf LANG für UnicodeEncodeError
Ich habe einen AttributeError erhalten, als ich die offene Methode in Python verspottet habe
Vorsichtsmaßnahmen bei Verwendung einer Liste oder eines Wörterbuchs als Standardargument
Moduszeile, wenn Sie den entsprechenden Python-Code in Vim öffnen
[Python] Ausführungszeit, wenn eine Funktion in einen Wörterbuchwert eingegeben wird
[Python] Der von Openpyxl geschriebene Wert wird als Exponent (E) angezeigt.
Erstellen einer Python-Umgebung unter Ubuntu (wenn pip nicht die Standardeinstellung war)
Jupyter Notebook 6.0.2 kann nicht in der in Anaconda erstellten Python 2.7-Umgebung installiert werden
Löse den kleinsten Wert in Python (entspricht Paiza Rang D)
Vorsichtsmaßnahmen beim Festlegen von Standardwerten für Argumente in Python-Funktionsdefinitionen
Abrufen der arXiv-API in Python
Vorsichtsmaßnahmen bei der Verwendung von Pit mit Python
Überprüfen Sie das Verhalten beim Zuweisen von Python
Definition des Funktionsargumenttyps in Python
[Python] Finden Sie den zweitkleinsten Wert.
Python im Browser: Brythons Empfehlung
Speichern Sie die Binärdatei in Python
Klicken Sie in Python auf die Sesami-API
Verhalten beim Auflisten in Python heapq
Holen Sie sich den Desktop-Pfad in Python