[Python-de] Neue Instance mit gleichem Typ über eine Variable?

Diez B. Roggisch deets at web.de
Sa Mai 25 21:35:34 CEST 2013


On May 25, 2013, at 12:23 PM, Michael Ströder <michael at stroeder.com> wrote:

> Thomas Lehmann wrote:
>> def foo(var = {}):
> 
> Ohne jetzt genau auf die Frage einzugehen, was andere ja schon gemacht haben:
> 
> Ist ein mutable Default-Wert für ein key-word argument nicht ein absolutes
> no-go? Zumindestens musste ich das selbst mal auf die harte Tour lernen und
> vor allem kann es je nachdem sicherheitsrelevant werden.

Ja, das ist gefährlich.

> 
> Besser wäre
> 
> def foo(var = None):
>  var = var or {}
>  [..]
> 
> Dann wird nämlich jedes Mal eine neue Dictionary-Instanz erzeugt, falls nur
> foo() aufgerufen wird.

Und noch besser wäre

var = {} if var is None else var

seit Python 2.5. Denn dieses Gefummel mit or und and statt dem ternaeren if führt ebenfalls zu seiner ganz eigenen Klasse von Fehlern. 

Diez


Mehr Informationen über die Mailingliste python-de