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