[PYTHON] Rendre la valeur par défaut de l'argument immuable (explication de l'article)

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

Rendre la valeur par défaut de l'argument immuable (explication de l'article)
Rendre la valeur par défaut de l'argument immuable
Le moment auquel la valeur de l'argument par défaut est évaluée diffère entre Ruby et Python.
Code qui définit les valeurs par défaut en cas d'AttributeError
Trouvez la définition de la valeur de errno
Rendre le serveur SIP aussi concis que possible (au milieu de l'explication)
Soyez prudent lorsque vous spécifiez la valeur d'argument par défaut dans la série Python 3
Si vous donnez une liste avec l'argument par défaut de la fonction ...
Rendre le shell interactif par défaut IPython
À propos de la valeur de retour de l'histogramme.
Supplément à l'explication de vscode
J'ai personnellement mâché l'article d'explication de la section DP (Daruma drop)
L'histoire de la fabrication d'un moule immuable
Obtenez la valeur de la couche intermédiaire de NN
Attention à la valeur de retour de __len__
La valeur de pyTorch torch.var () n'est pas distribuée
Essayez de décomposer la matrice daimyo par valeur singulière
Découvrez la fraction de la valeur saisie en python
Correction des arguments de la fonction utilisée dans map
Rechercher par la valeur de l'instance dans la liste
Rendre la progression de dd visible sur la barre de progression
N'y a-t-il pas une valeur par défaut dans le dictionnaire?
L'explication la plus simple au monde sur la création de LINE BOT (1) [Account preparation]