Je n'ai pas encore utilisé Python, J'étais un peu accro sans connaître les spécifications des arguments par défaut.
En fait, la valeur spécifiée dans l'argument par défaut est ** cache **, donc si vous utilisez des ** données mutables ** telles qu'une liste ou un dictionnaire comme argument par défaut sans le savoir, elles se comporteront involontairement.
#a est l'argument par défaut
def hoge(a=[]):
a.append('a')
print(a)
hoge() # ['a']
hoge() # ['a', 'a'] ※['a']n'est pas
Si vous faites ce qui précède, le deuxième appel à hoge () se traduira par ['a', 'a'] au lieu de a = ['a']. C'est parce que ['a'] après le premier appel est réutilisé.
Utilisez des valeurs ** immuables ** telles que None, des nombres, des chaînes et des taples comme arguments par défaut.
Si vous voulez vraiment utiliser une liste ou un dictionnaire comme argument par défaut, utilisez la méthode suivante.
def hoge(a=None):
if a is None:
a = []
a.append('a')
print(a)
hoge() # ['a']
hoge() # ['a']
Recommended Posts