28 May
2013
28 May
'13
4:38 a.m.
Peter Otten wrote:
Nicht nur bei verschiedenen Typen; ein leeres dict wird ebenfalls von
var = var or {}
durch ein neues ersetzt, das heißt
def foo(x=None): if x is None: x = {} return x
def bar(x=None): return x or {}
x = {} assert x is foo(x) # ok assert x is bar(x) # error
Das Problem kann man vermeiden, indem man sich an die Konvention hält, dass Funktionen, die ihre Argumente verändern, None zurückgeben.
Seiteneffekte auf einen mutable type innerhalb einer Funktion/Methode und diesen dann als Ergebnis zurück liefern ist sowieso nicht wirklich robust. Kommt bei mir praktisch nicht vor. Ciao, Michael.