C'est une histoire qu'il y a un piège pour passer la valeur du système de référence à l'argument par défaut.
def hoge(lst=[]):
lst.append('hoge')
print(lst)
hoge()
hoge()
Puisque lst est un tableau vide par défaut, vous verrez probablement ['hoge']
deux fois.
Résultat d'exécution
['hoge']
['hoge', 'hoge']
La deuxième fois, 2 hoge sont attachés.
Modifions un peu le code précédent et faisons ceci.
def called():
print('called!')
return []
def hoge(lst=called()):
lst.append('hoge')
print(lst)
hoge()
hoge()
Le résultat est comme ça.
Résultat d'exécution
called!
['hoge']
['hoge', 'hoge']
À propos, appelé est affiché sans hoge ().
En d'autres termes, il semble que la valeur de l'argument par défaut soit appelée et générée une seule fois lorsque la fonction est définie, et la valeur déjà générée est utilisée lors de l'appel de la fonction.
Comme indiqué ci-dessus, le modèle selon lequel "" [] "est donné comme argument par défaut et l'instance de liste est partagée par tous les appels de fonction qui ne spécifient pas d'argument semble être commun.
Je suis désolé si c'est du bon sens.
Recommended Posts