Choses à surveiller lors de l'utilisation d'arguments par défaut en Python

introduction

Je n'ai pas encore utilisé Python, J'étais un peu accro sans connaître les spécifications des arguments par défaut.

La valeur spécifiée par l'argument par défaut est mise en cache

En fait, la valeur spécifiée dans l'argument par défaut est ** cache **, donc si vous utilisez des ** données mutables ** telles qu'une liste ou un dictionnaire comme argument par défaut sans le savoir, elles se comporteront involontairement.

#a est l'argument par défaut
def hoge(a=[]):
  a.append('a')
  print(a)

hoge() # ['a']
hoge() # ['a', 'a'] ※['a']n'est pas

Si vous faites ce qui précède, le deuxième appel à hoge () se traduira par ['a', 'a'] au lieu de a = ['a']. C'est parce que ['a'] après le premier appel est réutilisé.

Solution

Utilisez des valeurs ** immuables ** telles que None, des nombres, des chaînes et des taples comme arguments par défaut.

Si vous voulez vraiment utiliser une liste ou un dictionnaire comme argument par défaut, utilisez la méthode suivante.

def hoge(a=None):
  if a is None:
    a = []
  a.append('a')
  print(a)

hoge() # ['a']
hoge() # ['a']

Recommended Posts

Choses à surveiller lors de l'utilisation d'arguments par défaut en Python
Points à prendre en compte lors de l'attribution d'un nom au routage dynamique dans nuxt.js
Points à surveiller lors de la création d'un environnement Python sur un Mac
Points à garder à l'esprit lors de la migration avec Django
Points à garder à l'esprit lors de l'utilisation de Python pour ceux qui utilisent MATLAB
Précautions lors de l'utilisation de Python avec AtCoder
Choses à garder à l'esprit lors de l'utilisation de cgi avec python.
Précautions lors de l'attribution de valeurs par défaut aux arguments dans les définitions de fonctions Python
Points à garder à l'esprit lors du développement d'un robot d'exploration en Python
Comment prendre plusieurs arguments lors d'un traitement parallèle à l'aide du multitraitement en python
Points à garder à l'esprit lors de la copie de listes Python
Choses à noter lors de l'initialisation d'une liste en Python
Comment quitter lors de l'utilisation de Python dans Terminal (Mac)
Points à garder à l'esprit lors du traitement des chaînes en Python2
Points à garder à l'esprit lors du traitement des chaînes en Python 3
Points à garder à l'esprit lors de la création d'outils automatisés pour l'atelier en Python
Précautions lors de l'utilisation de Pit avec Python
Lors de l'utilisation d'expressions régulières en Python
Point 17 de la note Python efficace Respect de la certitude lors de l'utilisation d'itérateurs pour les arguments
Pour définir le codage par défaut sur utf-8 en python
[python, multitraitement] Comportement des exceptions lors de l'utilisation du multitraitement
25/03/2015 python> Commentaire sur plusieurs lignes> Attention au retrait
Précautions lors de l'utilisation de l'instruction for dans les pandas
Connectez-vous à Slack à l'aide de requêtes en Python
Remarques sur l'utilisation de python (pydev) avec eclipse
Une note utile lors de l'utilisation de Python après une longue période
Comment recevoir des arguments de ligne de commande en Python
Enregistrer automatiquement les arguments de fonction dans argparse en Python
Essayez de calculer RPN avec Python (pour les débutants)
Erreur lors de la tentative d'installation de psycopg2 en Python
Trois choses auxquelles j'étais accro lors de l'utilisation de Python et MySQL avec Docker
Un outil pour créer des images de masque pour ETC en Python
[Pour les débutants] Comment utiliser la commande say avec python!
Structure de répertoire pour le développement piloté par les tests à l'aide de pytest en python
[AWS IoT] Enregistrer des éléments dans AWS IoT à l'aide du SDK AWS IoT Python
Comment exécuter python dans l'espace virtuel (pour MacOS)
Paramètres initiaux lors de l'utilisation de l'API foursquare avec python
Erreur due à un conflit entre pythons lors de l'utilisation de gurobi
Définissez les arguments mot-clés du constructeur sur les attributs fictifs en Python
Emplacement de modification du code lors de l'utilisation de plotly gratuitement
Articles à voir lorsque l'installation de Python + OpenCV échoue
Comment récupérer plusieurs tableaux à l'aide de slice en python.
Lorsque vous voulez plt.save dans l'instruction for
Comment exécuter une commande à l'aide d'un sous-processus en Python
[Introduction à Python] Comment écrire des instructions répétitives à l'aide d'instructions for
Attention à randint
Ce à quoi j'étais accro lors de l'utilisation de Python tornado
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.
Je veux faire quelque chose avec Python à la fin
Je connais? Analyse de données à l'aide de Python ou de choses que vous souhaitez utiliser quand vous le souhaitez avec numpy
[Pour les débutants des professionnels de la compétition] Trois méthodes de saisie à retenir lors du démarrage de la programmation de compétition avec Python
Comment trouver la somme / somme cumulée pour chaque groupe à l'aide de DataFrame dans Spark [version Python]
Essayez de le faire avec GUI, PyQt en Python
Conversion de Pandas DataFrame en System.Data.DataTable à l'aide de Python pour .NET
Un moyen simple d'éviter plusieurs boucles for en Python
Une note lors de la création d'un graphe dirigé à l'aide de Graphviz en Python
Comment définir plusieurs variables dans une instruction Python for
Conseils pour coder courts et faciles à lire en Python
Comment spécifier Cache-Control pour le stockage BLOB dans le stockage Azure en Python
Astuces utiles liées à la liste et aux instructions en Python