Ist es ein guter Stil, Tupel anstelle von Listen für konstante Iterables auf Modulebene in Python zu verwenden? Zum Beispiel habe ich eine Liste von wichtigen Saiten an der Spitze meiner Datei, die ich in meinem Eingang suchen muß:Tupel vs Listen für Modulebenenkonstanten in Python?
IMPORTANT_STRINGS = [
"Hello world!",
"Goodbye world!",
"Foo...",
# etc --- there are about 40 entries
]
IMPORTANT_STRINGS
wird nie geändert werden, während mein Programm läuft.
Auf der einen Seite denke ich, dass Unveränderlichkeit gut ist und dass ich sollte unveränderlich Datenstrukturen, wann immer möglich bevorzugen, also sollte ich stattdessen ein Tupel verwenden.
Auf der anderen Seite, denke ich, dass Tupel mehr als nur unveränderliche Listen sind: Sie sind für heterogene Sammlungen, die verwendet werden sollten, wenn Sie Dinge wie Paare, Triples usw. passieren - Dinge fester Größe deren Größe wichtig ist für das, was sie sind. Ich denke auch nicht, dass ich jemals Python-Code in der freien Natur gesehen habe, die Tupel für Konstanten wie diese verwendet, und es sieht aus, um mein Auge wirklich seltsam zu sagen:
IMPORTANT_STRINGS = (
"Hello world!",
etc
)
Konstante impliziert Unveränderlichkeit, so würde ich persönlich ein Tupel verwenden ... das sagte ich bin ziemlich sicher, es gibt keine "Best Practice" für diese definiert so verwenden Sie, was Sie wollen mehr –
Warum gruppieren Sie diese zusammen in irgendeiner Art von Struktur an alle? Werden Sie jemals über sie iterieren? Wirst du jemals auf sie per Index zugreifen (und wenn ja, ist das wirklich der beste Weg, um an sie heranzukommen?) Warum definierst du überhaupt String-Konstanten? Lange Sammlungen von String-Konstanten im Allgemeinen scheinen mir nur ein schlechter Code-Geruch zu sein, wobei das, was Sie wirklich wollen, eine Art Attribut für ein Objekt oder stattdessen Schlüsselwort-Argumente wären. Es ist ein Symptom von [stringly typed code] (http://c2.com/cgi/wiki?StringlyTyped). – ArtOfWarfare
Betreffend herogenerous - Listen sollten aus allen Objekten des gleichen Typs bestehen. Tuples haben keine solchen Einschränkungen - sie können Objekte unterschiedlicher Art haben oder auch nicht. Aber da Ihre Variable 'WICHTIGES_STRINGEN' heißt, denke ich, dass es für den Benutzer schon ziemlich klar ist, dass die Werte innerhalb des Typs' string' sind, unabhängig vom Typ der Sammlung. – ArtOfWarfare