Re: [Python-de] Neue Instance mit gleichem Typ über eine Variable?
Diez B. Roggisch wrote:
On May 26, 2013, at 8:57 AM, Michael Ströder <michael@stroeder.com> wrote:
Nun, man hat leider nicht immer das Privileg eine einigermaßen aktuelle Python-Version zur Verfügung zu haben (z.B. RHEL5).
Deswegen kann man trotzdem zeigen, wie der Stand der Technik ist (und das seit fast 7 Jahren).
Hat niemand was dagegen gesagt.
Denn dieses Gefummel mit or und and statt dem ternaeren if führt ebenfalls zu seiner ganz eigenen Klasse von Fehlern.
Welche Fehler sind das genau?
In dem Moment, wo deine Erwartungshaltung bool(o) == False auch von an var übergebenen Objekten erfüllt wird.
Ah, Du meinst wenn Deine Funktion/Methode verschiedene Typen akzeptiert (Duck-Typing). In diesem bei mir eher seltenen Fall mache ich sowieso immer: if var is None: var = {} Ciao, Michael.
Michael Ströder wrote:
Diez B. Roggisch wrote:
On May 26, 2013, at 8:57 AM, Michael Ströder <michael@stroeder.com> wrote:
Nun, man hat leider nicht immer das Privileg eine einigermaßen aktuelle Python-Version zur Verfügung zu haben (z.B. RHEL5).
Deswegen kann man trotzdem zeigen, wie der Stand der Technik ist (und das seit fast 7 Jahren).
Hat niemand was dagegen gesagt.
Denn dieses Gefummel mit or und and statt dem ternaeren if führt ebenfalls zu seiner ganz eigenen Klasse von Fehlern.
Welche Fehler sind das genau?
In dem Moment, wo deine Erwartungshaltung bool(o) == False auch von an var übergebenen Objekten erfüllt wird.
Ah, Du meinst wenn Deine Funktion/Methode verschiedene Typen akzeptiert (Duck-Typing). In diesem bei mir eher seltenen Fall mache ich sowieso immer:
if var is None: var = {}
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.
participants (2)
-
Michael Ströder
-
Peter Otten