Soyez prudent lorsque vous spécifiez la valeur d'argument par défaut dans la série Python 3

Mémo de P115 de http://www.amazon.co.jp/dp/4873117380

Lors de la définition d'une fonction en python, vous pouvez définir une valeur par défaut pour l'argument, mais la valeur de la valeur par défaut est calculée lorsqu'elle est définie </ b>, pas lorsque la fonction est exécutée. ..

Par conséquent, si vous définissez la fonction comme suit, la liste n'est pas vide et la valeur au moment de l'appel précédent reste après la deuxième fois.

In [32]: def buggy(arg, result=[]):
   ....:     result.append(arg)
   ....:     print(result)
   ....:

In [33]: buggy('a')
['a']

In [34]: buggy('b')
['a', 'b']

Autant que possible, c'est un point pour éviter les bugs en spécifiant des valeurs par défaut immuables.

Il existe différentes manières d'éviter cela, mais par exemple, indiquez clairement qu'il s'agit du premier appel comme suit.

In [35]: def nonbuggy(arg, result=None):
   ....:     if result is None:
   ....:         result = []
   ....:     result.append(arg)
   ....:     print(result)
   ....:
In [36]: nonbuggy('a')
['a']

In [37]: nonbuggy('b')
['b']

Recommended Posts

Soyez prudent lorsque vous spécifiez la valeur d'argument par défaut dans la série Python 3
Obtenez la valeur tout en spécifiant la valeur par défaut de dict en Python
Le moment auquel la valeur de l'argument par défaut est évaluée diffère entre Ruby et Python.
Quand les arguments par défaut seront-ils liés en python? Lorsque les variables sont liées dans l'évaluation différée de la fermeture.
Maîtrisez le type avec Python? (Quand faire la vérification de type)
[Python] Soyez prudent lorsque vous utilisez print
Que faire lorsque le type de valeur est ambigu en Python?
Lors de la spécification de plusieurs clés dans le tri python
⚠️ Méfiez-vous des valeurs d'argument par défaut de Python ⚠️
Rendre la valeur par défaut de l'argument immuable
Découvrez la fraction de la valeur saisie en python
N'y a-t-il pas une valeur par défaut dans le dictionnaire?
[pandas] Lors de la spécification de l'étiquette d'index par défaut dans la méthode at, "" n'est pas requis
Remarque Python: lorsque la commande pip ne peut pas être utilisée
Comment récupérer la nième plus grande valeur en Python
piège d'argument par défaut de python
Paramètres initiaux lors de l'utilisation de l'API foursquare avec python
Soyez prudent lors de la différenciation des vecteurs propres d'une matrice
Comportement des arguments par défaut de Python
Rendre la valeur par défaut de l'argument immuable (explication de l'article)
Remarque: Signification de spécifier uniquement * (astérisque) comme argument dans la définition de fonction de Python
Obtenez la valeur sélectionnée dans le menu déroulant Selenium Python VBA
La valeur de meta lors de la spécification d'une fonction sans valeur de retour avec Dask dataframe s'applique
Lorsqu'une chaîne de caractères d'une certaine série se trouve dans la clé du dictionnaire, la chaîne de caractères est convertie en valeur du dictionnaire.
Élément de note Python efficace 20 Utilisez Aucun et la chaîne de documentation lors de la spécification d'arguments par défaut dynamiques
Code qui définit les valeurs par défaut en cas d'AttributeError
Solution lorsque l'image ne peut pas être affichée avec tkinter [python]
Soyez prudent lorsque vous attribuez une série en tant que colonne aux pandas.
Comment obtenir la dernière (dernière) valeur d'une liste en Python
Résolvez le problème japonais lors de l'utilisation du module CSV en Python.
Scripts pouvant être utilisés lors de l'utilisation de Bottle en Python
[Introduction à Udemy Python3 + Application] 51. Soyez prudent avec les arguments par défaut
Trouver des erreurs en Python
Calcul de la valeur de jeu de cisaillement en Python
Attention lorsque os.mkdir en Python
Une raison simple pour laquelle la valeur de retour de round (2.675,2) est de 2,67 en python (elle devrait être de 2,68 en réalité ...)
Choses à surveiller lors de l'utilisation d'arguments par défaut en Python
Faites attention à LANG pour UnicodeEncodeError lors de l'impression du japonais avec Python 3
J'ai eu un AttributeError en me moquant de la méthode ouverte en python
Précautions lors de l'utilisation d'une liste ou d'un dictionnaire comme argument par défaut
Ligne de mode lorsque vous ouvrez le code Python approprié dans Vim
[Python] Temps d'exécution lorsqu'une fonction est saisie dans une valeur de dictionnaire
[Python] La valeur écrite par Openpyxl est affichée sous forme d'exposant (E).
Construire un environnement Python sur Ubuntu (lorsque pip n'était pas la valeur par défaut)
Jupyter Notebook 6.0.2 ne peut pas être installé dans l'environnement Python 2.7 créé dans Anaconda
Résolvez la plus petite valeur en Python (équivalent au rang D de paiza)
Précautions lors de l'attribution de valeurs par défaut aux arguments dans les définitions de fonctions Python
Obtenir l'API arXiv en Python
Précautions lors de l'utilisation de Pit avec Python
Vérifiez le comportement lors de l'attribution de Python
Définition du type d'argument de fonction en python
[Python] Trouvez la deuxième plus petite valeur.
Python dans le navigateur: la recommandation de Brython
Enregistrez le fichier binaire en Python
Frappez l'API Sesami en Python
Comportement lors de la liste dans Python heapq
Obtenez le chemin du bureau en Python