Warum behebt die Verwendung von None das Problem mit dem veränderlichen Standardargument von Python?
Ich bin an dem Punkt, an dem ich Python lerne, mit dem ich es zu tun habedas Mutable Default Argument Problem.
def bad_append(new_item, a_list=[]):
a_list.append(new_item)
return a_list
def good_append(new_item, a_list=None):
if a_list is None:
a_list = []
a_list.append(new_item)
return a_list
ich verstehe dasa_list
wird nur initialisiert, wenn diedef
Anweisung wird zuerst angetroffen, und deshalb nachfolgende Aufrufe vonbad_append
Verwenden Sie dasselbe Listenobjekt.
Was ich nicht verstehe, ist warumgood_append
funktioniert anders. Es sieht aus wiea_list
würdeimmer noch nur einmal initialisiert werden; deshalb, dieif
Aussage wäre nur beim ersten Aufruf der Funktion wahr, alsoa_list
würde nur zurückgesetzt werden[]
beim ersten Aufruf, dh es würde sich immer noch die gesamte Vergangenheit ansammelnnew_item
Werte und immer noch fehlerhaft sein.
Warum ist es nicht? Welches Konzept vermisse ich? Wie geht das?a_list
werde jedes Mal sauber gewischtgood_append
läuft?