[Python-de] Neue Instance mit gleichem Typ über eine Variable?
Peter Otten
__peter__ at web.de
Di Mai 28 10:48:48 CEST 2013
Michael Ströder wrote:
> Diez B. Roggisch wrote:
>>
>> On May 26, 2013, at 8:57 AM, Michael Ströder
>> <michael at 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.
Mehr Informationen über die Mailingliste python-de