Rendre la valeur par défaut de l'argument immuable

Vous pouvez définir la valeur par défaut de l'argument dans la définition de fonction

def foo(bar=[]):
    bar.append('baz')
    return bar

Lancer foo () retourne la liste ['baz']

>>> foo()
['baz']

Et si nous exécutions à nouveau le même code?

>>> foo()
['baz', 'baz']

Le résultat a changé. La raison en est que Python évalue uniquement la valeur par défaut d'une fonction la première fois. Et la liste Python est modifiable, et ʻappend () `ajoute des arguments destructeurs à la liste, ce qui entraîne des résultats inattendus lors de la deuxième exécution. ..

Pour résoudre ce problème, définissez un objet immuable par défaut. Dans le cas de la fonction foo cette fois

def foo(bar=None):
    if bar is None:
        bar = []
    bar.append('baz')
    return bar

Faire. Peu importe le nombre de fois que cette fonction est appelée sans argument, None est immuable, donc elle renvoie le même résultat à chaque fois.

>>> foo()
['baz']
>>> foo()
['baz']

En Python, str est immuable, donc utiliser une chaîne comme valeur par défaut est très bien.

Recommended Posts

Rendre la valeur par défaut de l'argument immuable
Rendre la valeur par défaut de l'argument immuable (explication de l'article)
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
À propos de la valeur de retour de pthread_mutex_init ()
Rendre le shell interactif par défaut IPython
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 ...
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__
Copiez la liste en Python
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?
[Python of Hikari-] Chapitre 06-02 Fonction (argument et valeur de retour 1)
[Python] Calculez la valeur moyenne de la valeur de pixel RVB de l'objet
Créez un BOT qui raccourcit l'URL Discord
Prenez note de la liste des utilisations de base de Pandas
[Langage C] [Linux] Récupère la valeur de la variable d'environnement
Prenez la valeur du thermo-hygromètre SwitchBot avec Raspberry Pi
Changer les valeurs du thermo-hygromètre Bot avec Raspberry Pi
[Golang] Spécifiez un tableau pour la valeur de la carte
J'ai examiné l'argument class_weight de la fonction softmax_cross_entropy de Chainer.
J'ai vérifié le système d'exploitation et le shell par défaut de docker-machine
[Django] Changer l'adresse IP par défaut de la commande runserver
Différence de résultats en fonction de l'argument du multiprocessus.
L'histoire selon laquelle la valeur de retour de tape.gradient () était None
[Django 2.2] Trier et obtenir la valeur de la destination de la relation
Pourquoi le premier argument de la classe [Python] est-il self?
La méthode de copie de pandas.DataFrame est une copie profonde par défaut
Le début de cif2cell
piège d'argument par défaut de python
Rendre l'outil simplement
Le sens de soi
Comportement des arguments par défaut de Python
le zen de Python
L'histoire de sys.path.append ()
La vengeance des types: la vengeance des types
Changer la valeur de paramètre de setting.py en fonction de l'environnement de développement
Remarque sur le comportement par défaut de collate_fn dans PyTorch
Facilitez la compréhension de l'affichage des exceptions du module Python
Faisons l'analyse des données de naufrage du Titanic comme ça
Hériter de la bibliothèque standard pour trouver la valeur moyenne de Queue
Votre URL n'a pas répondu avec la valeur du paramètre de défi.
Trouver l'index de la valeur maximale (valeur minimale) d'un tableau multidimensionnel
Obtenez la valeur tout en spécifiant la valeur par défaut de dict en Python
Quelle est la version TLS par défaut du module de requêtes python?
Extraire la valeur de dict ou list sous forme de chaîne de caractères
Une histoire sur l'écriture d'AWS Lambda et de devenir un peu accro aux valeurs par défaut des arguments Python