webentwicklung-frage-antwort-db.com.de

Warum ist das leere Wörterbuch in Python ein gefährlicher Standardwert?

Ich habe leere Klammern als Standardwert für ein optionales Argument für eine Python) - Funktion angegeben, und pylint (mit dem Sublime-Paket) hat mir mitgeteilt, dass dies gefährlich ist. Kann jemand erklären, warum dies der Fall ist? eine bessere Alternative zu None?

68
tscizzle

Es ist nur gefährlich, wenn Ihre Funktion das Argument ändert. Wenn Sie ein Standardargument ändern, bleibt es bis zum nächsten Aufruf bestehen, sodass Ihr "leeres" Diktat Werte für andere Aufrufe als das erste enthält.

Ja, die Verwendung von None ist in solchen Fällen sowohl sicher als auch konventionell.

81
John Zwinck

Schauen wir uns ein Beispiel an:

def f(value, key, hash={}):
    hash[value] = key
    return hash

print f('a', 1)
print f('b', 2)

Was Sie wahrscheinlich erwarten, um auszugeben:

{'a': 1}
{'b': 2}

Tatsächlich gibt es aber:

{'a': 1}
{'a': 1, 'b': 2}
99
Bill Lynch