Moin Moin, Für mein momentanes Projekt brauche ich dynamische Variablen (in einer Class) wie etwa: for x in range(10): exec("_"+str(x)+" = ...") so das ich, nach dem Bsp., 10 Variablen mit _0 = ... , _1 = ... kriege. Ich persönlich finde das dies unglaublich hässlicher und vor allem unübersichtlicher Code ist. Neben dessen kommt hinzu das die Variablen für tkinter Widgets sind, also durch die vielen Apostrophe und allgemein sehr langen Zeilen noch unleserlicher werden. Habt ihr bessere Ideen? Dankeschön und noch ne schönen Tach ;) Felix
Am 27. Juni 2012 21:25 schrieb felix conrads
Moin Moin,
Für mein momentanes Projekt brauche ich dynamische Variablen (in einer Class) wie etwa:
for x in range(10): exec("_"+str(x)+" = ...")
so das ich, nach dem Bsp., 10 Variablen mit _0 = ... , _1 = ... kriege.
Ich persönlich finde das dies unglaublich hässlicher und vor allem unübersichtlicher Code ist. Neben dessen kommt hinzu das die Variablen für tkinter Widgets sind, also durch die vielen Apostrophe und allgemein sehr langen Zeilen noch unleserlicher werden.
Habt ihr bessere Ideen?
Verwende eine passende Datenstruktur, i.e. eine Liste oder ein Wörterbuch. Generierte und insbesondere durchnummierte Namen sind – bis auf sehr wenige Ausnahmen – *immer* ein Code-Smell.
Hallo, On 06/27/12 21:32, Sebastian Wiesner wrote:
Am 27. Juni 2012 21:25 schrieb felix conrads
: Für mein momentanes Projekt brauche ich dynamische Variablen (in einer Class) wie etwa:
for x in range(10): exec("_"+str(x)+" = ...")
so das ich, nach dem Bsp., 10 Variablen mit _0 = ... , _1 = ... kriege.
Verwende eine passende Datenstruktur, i.e. eine Liste oder ein Wörterbuch. Generierte und insbesondere durchnummierte Namen sind – bis auf sehr wenige Ausnahmen – *immer* ein Code-Smell.
Davon abgesehen, dass ich Sebastian hier recht gebe (*), gibt es auch noch die Builtin-Funktion setattr. Bezogen auf dein Beispiel: for i in xrange(10): setattr(MeineKlasse, "_%d" % i, ...) (*) mal abgesehen vom Widerspruch "bis auf sehr wenige Ausnahmen" vs. "immer" ;-) Viele Grüße Stefan
Am 27. Juni 2012 21:32 schrieb Sebastian Wiesner
Am 27. Juni 2012 21:25 schrieb felix conrads
: Moin Moin,
Für mein momentanes Projekt brauche ich dynamische Variablen (in einer Class) wie etwa:
for x in range(10): exec("_"+str(x)+" = ...")
so das ich, nach dem Bsp., 10 Variablen mit _0 = ... , _1 = ... kriege.
Ich persönlich finde das dies unglaublich hässlicher und vor allem unübersichtlicher Code ist. Neben dessen kommt hinzu das die Variablen für tkinter Widgets sind, also durch die vielen Apostrophe und allgemein sehr langen Zeilen noch unleserlicher werden.
Habt ihr bessere Ideen?
Verwende eine passende Datenstruktur, i.e. eine Liste oder ein Wörterbuch. Generierte und insbesondere durchnummierte Namen sind – bis auf sehr wenige Ausnahmen – *immer* ein Code-Smell.
Hmm... das Problem ist, dass ich ums generieren nicht drum herum kommen kann, da ich wie gesagt tkinter Widgets damit "bennene". Es wäre ja null Problemo diese einfach zu generieren, aber ich muss im nachhinein auf einzelne Bezug ziehen können. Ein bisschen schwer zu erklären, ich schilder einfach mal was ich genau machen will :) Mein Vorhaben ist es eine Art Table-Widget, wie in Java das JTable, zu programmieren. Daher brauch ich für jede Zelle ein "benanntes" Widget um im nachhinein noch drauf zu greifen zu können ;) Nun ja, Aber danke für die extrem schnelle Antwort :)
Am 28.06.2012 02:02, schrieb felix conrads:
Mein Vorhaben ist es eine Art Table-Widget, wie in Java das JTable, zu programmieren. Daher brauch ich für jede Zelle ein "benanntes" Widget um im nachhinein noch drauf zu greifen zu können ;)
Nun ja, Aber danke für die extrem schnelle Antwort :)
Genau dafür gibt es dict, sprich Wörterbücher. In Java würdest du doch
auch eine java.util.HashMap
Am 28. Juni 2012 02:02 schrieb felix conrads
Am 27. Juni 2012 21:32 schrieb Sebastian Wiesner
:
Am 27. Juni 2012 21:25 schrieb felix conrads
: Moin Moin,
Für mein momentanes Projekt brauche ich dynamische Variablen (in einer Class) wie etwa:
for x in range(10): exec("_"+str(x)+" = ...")
so das ich, nach dem Bsp., 10 Variablen mit _0 = ... , _1 = ... kriege.
Ich persönlich finde das dies unglaublich hässlicher und vor allem unübersichtlicher Code ist. Neben dessen kommt hinzu das die Variablen für tkinter Widgets sind, also durch die vielen Apostrophe und allgemein sehr langen Zeilen noch unleserlicher werden.
Habt ihr bessere Ideen?
Verwende eine passende Datenstruktur, i.e. eine Liste oder ein Wörterbuch. Generierte und insbesondere durchnummierte Namen sind – bis auf sehr wenige Ausnahmen – *immer* ein Code-Smell.
Hmm... das Problem ist, dass ich ums generieren nicht drum herum kommen kann, da ich wie gesagt tkinter Widgets damit "bennene". Es wäre ja null Problemo diese einfach zu generieren, aber ich muss im nachhinein auf einzelne Bezug ziehen können. Ein bisschen schwer zu erklären, ich schilder einfach mal was ich genau machen will :)
Mein Vorhaben ist es eine Art Table-Widget, wie in Java das JTable, zu programmieren. Daher brauch ich für jede Zelle ein "benanntes" Widget um im nachhinein noch drauf zu greifen zu können ;)
Nun ja, Aber danke für die extrem schnelle Antwort :)
Oh ich hatte grad einen Geistesblitz, das klappt wunderbar mit einem Wörterbuch. Sorry dafür und vielen herzlichen Dank, schöne Grüße Felix
On 27.06.2012 21:25, felix conrads wrote:
for x in range(10): exec("_"+str(x)+" = ...")
so das ich, nach dem Bsp., 10 Variablen mit _0 = ... , _1 = ... kriege.
Habt ihr bessere Ideen?
Variablen sind in Python Symbole in einem Namespace (z.B. der globale Modulnamespace). Ein Namespace ist also ein Key (Symbolname) / Value (Object) Speicher. An was erinnert uns das? Genau: Dictionaries. Also, einfach, anstatt generierten Variablennamen, Keys in einem Dictionary verwenden. Chris
participants (5)
-
Christian Heimes
-
Christopher Arndt
-
felix conrads
-
Sebastian Wiesner
-
Stefan Schwarzer