Ich werde diesen Artikel erklären, damit Sie ihn verstehen können. Bitte vergib mir, obwohl ich den gleichen Inhalt schreiben werde. https://qiita.com/yuku_t/items/fd517a4c3d13f6f3de40
Sie können Standardwerte für Argumente in Funktionsdefinitionen und in der Klasse init festlegen. Wenn zu diesem Zeitpunkt der Typ des Arguments, für das der Anfangswert angegeben wurde, ein veränderbarer Typ ist, ist er möglicherweise nicht gut.
Funktion mit Anfangswert(Schlechtes Beispiel).py
def foo(bar=[]): #Der Listentyp ist veränderlich, seien Sie vorsichtig!
bar.append('baz')
print(bar)
Wenn Sie dies mit den Standardwerten tun
Lauf.py
>>> foo()
['baz']
>>> foo()
['baz', 'baz'] #Das?
Das Ergebnis hat sich geändert. Der Grund dafür ist, dass in Python dem Standardwert einer Funktion Speicher zugewiesen wird, wenn die Funktion definiert wird. Oben sind zwei "baz" enthalten, da der Append-Vorgang zweimal für den Listentyp ausgeführt wurde, der bei der Definition der Funktion erstellt wurde.
Um dieses Problem zu beheben Mit anderen Worten, wenn Sie einem veränderlichen Typargument problemlos einen Anfangswert geben möchten, können Sie beim Aufrufen der Funktion Speicher zuweisen, nicht beim Definieren der Funktion. Das heißt, die Initialisierung wird innerhalb der Funktion durchgeführt.
Funktion mit Anfangswert(Gutes Beispiel).py
def foo(bar=None):
if bar is None:
bar = []
bar.append('baz')
return bar
Es ist in Ordnung, dem unveränderlichen Typargument einen Anfangswert zu geben. Referenz: https://qiita.com/makotoo2/items/fc3a617882916f9775f5
Recommended Posts