Mémo de P115 de http://www.amazon.co.jp/dp/4873117380
Lors de la définition d'une fonction en python, vous pouvez définir une valeur par défaut pour l'argument, mais la valeur de la valeur par défaut est calculée lorsqu'elle est définie </ b>, pas lorsque la fonction est exécutée. ..
Par conséquent, si vous définissez la fonction comme suit, la liste n'est pas vide et la valeur au moment de l'appel précédent reste après la deuxième fois.
In [32]: def buggy(arg, result=[]):
....: result.append(arg)
....: print(result)
....:
In [33]: buggy('a')
['a']
In [34]: buggy('b')
['a', 'b']
Autant que possible, c'est un point pour éviter les bugs en spécifiant des valeurs par défaut immuables.
Il existe différentes manières d'éviter cela, mais par exemple, indiquez clairement qu'il s'agit du premier appel comme suit.
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