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.
Default Wert in einer Funktion
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").
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,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").
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
Albertus