--Default-Argument wird beim Definieren einer Funktion nur einmal ausgewertet
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.
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