Python> Standardargument initialisiert kein veränderliches Objekt (z. B. Liste) /, da es bei der Definition initialisiert wird

@ 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.

Als Beispiel http://ideone.com/66DaME

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

Ergebnis


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

Es wird wie folgt sein.

http://ideone.com/9bsPfY

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

Ergebnis


['a']
['b']

Referenz ?: Interpretation von Argumenten und Konstruktion von Werten

Ich konnte es in der Standarddokumentation nicht als "Standardargument" finden.

Recommended Posts

Python> Standardargument initialisiert kein veränderliches Objekt (z. B. Liste) /, da es bei der Definition initialisiert wird
Python gibt keine Fehler oder Ausgaben aus, nur weil der Einzug falsch ausgerichtet ist
Geben Sie kein veränderbares Objekt (Listentyp, Wörterbuchtyp usw.) als Anfangswert des Funktionsarguments von Python an.