Je vais vous expliquer cet article pour que vous puissiez le comprendre. Veuillez me pardonner si j'écrirai le même contenu. https://qiita.com/yuku_t/items/fd517a4c3d13f6f3de40
Vous pouvez définir des valeurs par défaut pour les arguments dans les définitions de fonction et la classe init. À ce stade, si le type de l'argument donné à la valeur initiale est de type mutable, il peut ne pas être bon.
Fonction avec valeur initiale(Mauvais exemple).py
def foo(bar=[]): #Le type de liste est mutable, soyez prudent!
bar.append('baz')
print(bar)
Si vous faites cela avec la valeur par défaut
Courir.py
>>> foo()
['baz']
>>> foo()
['baz', 'baz'] #cette?
Le résultat a changé. La raison en est qu'en Python, la valeur par défaut d'une fonction est allouée en mémoire lorsque la fonction est définie. Dans ce qui précède, deux «baz» sont inclus car l'opération d'ajout a été effectuée deux fois pour le type de liste créé lorsque la fonction a été définie.
Pour résoudre ce problème En d'autres termes, si vous souhaitez donner une valeur initiale à un argument de type mutable sans aucun problème, vous pouvez allouer de la mémoire lors de l'appel de la fonction, pas lors de la définition de la fonction. Autrement dit, l'initialisation est effectuée à l'intérieur de la fonction.
Fonction avec valeur initiale(Bon exemple).py
def foo(bar=None):
if bar is None:
bar = []
bar.append('baz')
return bar
Il est normal de donner une valeur initiale à l'argument de type immuable. Référence: https://qiita.com/makotoo2/items/fc3a617882916f9775f5
Recommended Posts