Python> l'argument par défaut n'initialise pas l'objet mutable (par exemple la liste) / car il est initialisé à la définition

@ Introducing Python: Modern Computing in Simple Packages by Bill Lubanovic (No. 2550 / 12833)

Default argument values are calculated when the function is defined, not when it is run. A common error with new (and sometimes not-so-new) Python programmers is to use a mutable data type such as a list or dictionary as a default argument.

Par exemple http://ideone.com/66DaME

def buggy(arg, result=[]):
	result.append(arg)
	print(result)
 
buggy('a')
buggy('b')

résultat


['a']
['a', 'b']

Ce sera comme suit.

http://ideone.com/9bsPfY

def nobuggy(arg, result=None):
	if result is None:
		result = []
	result.append(arg)
	print(result)
	
nobuggy('a')
nobuggy('b')

résultat


['a']
['b']

Référence?: Interprétation des arguments et construction des valeurs

Je n'ai pas pu le trouver dans la documentation standard comme "argument par défaut".

Recommended Posts

Python> l'argument par défaut n'initialise pas l'objet mutable (par exemple la liste) / car il est initialisé à la définition
La liste Python n'est pas une liste
Python ne génère pas d'erreurs ou de sortie simplement parce que le retrait est mal aligné
Ne spécifiez pas un objet mutable (type de liste, type de dictionnaire, etc.) comme valeur initiale de l'argument de fonction de python.