Sie können den Standardwert des Arguments in der Funktionsdefinition festlegen
def foo(bar=[]):
bar.append('baz')
return bar
Wenn Sie "foo ()" ausführen, wird die Liste "['baz']" zurückgegeben
>>> foo()
['baz']
Was ist nun, wenn wir denselben Code erneut ausführen?
>>> foo()
['baz', 'baz']
Das Ergebnis hat sich geändert. Der Grund dafür ist, dass Python den Standardwert einer Funktion nur beim ersten Mal auswertet. Die Python-Liste ist veränderlich, und append ()
fügt der Liste destruktive Argumente hinzu, was beim zweiten Durchlauf zu unerwarteten Ergebnissen führt. ..
Um dieses Problem zu beheben, machen Sie ein unveränderliches Objekt zum Standard. Diesmal bei der Funktion "foo"
def foo(bar=None):
if bar is None:
bar = []
bar.append('baz')
return bar
Machen. Unabhängig davon, wie oft diese Funktion ohne Argumente aufgerufen wird, ist None unveränderlich und gibt jedes Mal das gleiche Ergebnis zurück.
>>> foo()
['baz']
>>> foo()
['baz']
In Python ist str unveränderlich, daher ist die Verwendung eines Strings als Standardwert in Ordnung.
Recommended Posts