Default Wert in einer Funktion

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
albertus
User
Beiträge: 52
Registriert: Mittwoch 7. Juli 2010, 14:48

Guten Morgen,

ich bin gerade dabei ein von mir geschriebenes Programm mit pylint zu entwanzen. Eine Meldung lautet:

Dangerous default value ([False]) * (6) ([False, False, False, False, False, False]) as argument

warum ist das so gefährlich? Ich habe diese schreib weise gewählt, weil dieses Argument, wenn es belegt ist, immer mit 6 Werten belegt wird. In der Methode wird das Argument per Tupel unpacking ausgepackt. Das Argument als Tupel mit 6 Defaultwerten zu belegen ist mir zu lang, da bevorzuge ich doch diese kurz schreib weise.
Mit freundlichen Grüßen

Albertus
lunar

pylint beschwert sich darüber, dass Du ein veränderliches Objekt als Standardwert für ein Argument benutzt. Default Parameter Values in Python erklärt, warum das problematisch ist. Die Warnung von pylint ist mithin vollkommen richtig.

Listen sind eben keine Tupel, und auch kein Ersatz dafür. Ein sechsstelliges Tupel kannst Du "(False,)*6" erzeugen. Allerdings stellt sich die Frage, ob ein sechsstelliges(!) Tupel als Argument sinnvoll ist. Schließlich ist es der Lesbarkeit nicht zuträglich, wenn man sich die Bedeutung von sechs Positionen bei der Lektüre des Quelltexts merken muss. Überlege Dir, ob Du dieses Tupel nicht besser auf sechs verschiedene Argumente aufteilst, oder in eine Klasse umwandelst (e.g. ein "namedtuple").
albertus
User
Beiträge: 52
Registriert: Mittwoch 7. Juli 2010, 14:48

lunar hat geschrieben:pylint beschwert sich darüber, dass Du ein veränderliches Objekt als Standardwert für ein Argument benutzt. Default Parameter Values in Python erklärt, warum das problematisch ist. Die Warnung von pylint ist mithin vollkommen richtig.

Listen sind eben keine Tupel, und auch kein Ersatz dafür. Ein sechsstelliges Tupel kannst Du "(False,)*6" erzeugen. Allerdings stellt sich die Frage, ob ein sechsstelliges(!) Tupel als Argument sinnvoll ist. Schließlich ist es der Lesbarkeit nicht zuträglich, wenn man sich die Bedeutung von sechs Positionen bei der Lektüre des Quelltexts merken muss. Überlege Dir, ob Du dieses Tupel nicht besser auf sechs verschiedene Argumente aufteilst, oder in eine Klasse umwandelst (e.g. ein "namedtuple").
Hallo Lunar,

danke für den Link, was ich da gerade gelesen habe wusste ich noch nicht, hab also gerade was dazugelernt. Das heißt jetzt zwar viel Arbeit, den ich muss jetzt ein paar 100 Zeilen Code überarbeiten, ist aber immer noch besser als eine Wanze im Programm zu haben. :-)

Im übrigen werde ich den Vorschlage einen namedtuple zu nehmen mal genauer prüfen, das scheint mir ein guter Kompromiss zu sein.
Mit freundlichen Grüßen

Albertus
Antworten