Python-Standardargumentfalle

einpacken

--Default-Argument wird beim Definieren einer Funktion nur einmal ausgewertet

Falle

Es ist eine Geschichte, dass es eine Falle gibt, um den Wert des Referenzsystems an das Standardargument zu übergeben.

def hoge(lst=[]):
    lst.append('hoge')
    print(lst)

hoge()
hoge()

Da lst standardmäßig ein leeres Array ist, sehen Sie wahrscheinlich zweimal [['hoge'] `.

Ausführungsergebnis


['hoge']
['hoge', 'hoge']

Beim zweiten Mal werden 2 Haken angebracht.

Grund

Lassen Sie uns den vorherigen Code ein wenig ändern und dies tun.

def called():
    print('called!')
    return []

def hoge(lst=called()):
    lst.append('hoge')
    print(lst)

hoge()
hoge()

Das Ergebnis ist so.

Ausführungsergebnis


called!
['hoge']
['hoge', 'hoge']

Call wird übrigens ohne hoge () angezeigt.

Mit anderen Worten, es scheint, dass der Wert des Standardarguments nur einmal aufgerufen und generiert wird, wenn die Funktion definiert ist, und der bereits generierte Wert beim Aufrufen der Funktion verwendet wird.

Wie oben gezeigt, scheint das Muster "[]als Standardargument und die Listeninstanz von allen Funktionsaufrufen gemeinsam genutzt zu werden, die das Argument nicht angeben.

Es tut mir leid, wenn es gesunder Menschenverstand ist.

Recommended Posts

Python-Standardargumentfalle
Python-Standardargumentverhalten
Zusammenfassung der Python-Funktionsargumente
Python oder und und Operatorfalle
Zweidimensionale Python-Array-Falle [Kopie des Arrays]
Befehlszeilenargumentverarbeitung (Python docopt)
[Python] Rückruffunktion (Funktion als Argument übergeben)
Seien Sie vorsichtig, wenn Sie den Standardargumentwert in der Python 3-Serie angeben
Definition des Funktionsargumenttyps in Python
Python
Erweiterung des Python-Wörterbuchs um Argumente
Ändern Sie die Standardcodierung von Python in utf-8
[Raspberry Pi] Python wurde standardmäßig in Python3 geändert
[Python] Einfache Überprüfung des Argumenttyps mit Datenklasse
Python-String wird standardmäßig zu f-String (vielleicht)
Beispielskript zum Überfüllen von Signalen in Python
⚠️ Achten Sie auf die Standardargumentwerte von Python ⚠️
So setzen Sie die Standardcodierung in Python auf utf-8
Machen Sie den Standardwert des Arguments unveränderlich