variablen dynamisch erstellen

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
dannemann
User
Beiträge: 18
Registriert: Samstag 6. September 2008, 17:29

Samstag 25. Oktober 2008, 15:08

hi leute,

irgendwie steh ich komplett auf der leitung.
also ich möchte mehrere variablen dynamisch erstellen

werte1,werte2,werte3,...

z.B. mit einer for-schleife.
ist dies überhaupt möglich oder bin ich jetzt ganz blöd :?:

hoffe mir kann jemand helfen.
danke
Wer Schmetterlinge lachen hört der weis wie Wolken schmecken
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Samstag 25. Oktober 2008, 15:10

Eine Liste ist dein Freund.
dannemann
User
Beiträge: 18
Registriert: Samstag 6. September 2008, 17:29

Samstag 25. Oktober 2008, 15:15

oh mann,

vielen dank numerix

das ich da nich selbst draufgekommen bin :oops:

tschuldigung das ich euch damit belästigt haben,

phil
Wer Schmetterlinge lachen hört der weis wie Wolken schmecken
Benutzeravatar
snafu
User
Beiträge: 5465
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Samstag 25. Oktober 2008, 17:02

So ein Forum ist dazu gedacht, Leute zu belästigen (sofern mit "belästigen" "Fragen stellen" gemeint ist). ;)
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Samstag 25. Oktober 2008, 18:04

Code: Alles auswählen

In [1]: for i in xrange(10):
   ...:     locals()['foo_%d' % i] = i
   ...:     
   ...:     

In [2]: foo_2
Out[2]: 2

In [3]: foo_5
Out[3]: 5
Das geht alles ;)
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

Samstag 25. Oktober 2008, 18:17

audax hat geschrieben:

Code: Alles auswählen

In [1]: for i in xrange(10):
   ...:     locals()['foo_%d' % i] = i
   ...:     
   ...:     

In [2]: foo_2
Out[2]: 2

In [3]: foo_5
Out[3]: 5
Das geht alles ;)
Grrr, bring Leuten gar nicht erst sowas bei... Natürlich geht alles, aber wenn man sowas in Produktivcode macht...

Es wird unübersichtlich, es wird anstrengend zu benutzen mit'r Zeit und wenn du oder jemand anders den Code noch verstehen möchte... in ein paar Wochen, dann sollte man wirklich lieber auf Lists oder auf die wunderschönen Dicts von Python zurückgreifen. Das da oben ist wirklich eher für... wenige Einsatzzwecke gedacht.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Samstag 25. Oktober 2008, 18:23

BlackVivi hat geschrieben:Das da oben ist wirklich eher für... wenige Einsatzzwecke gedacht.
Mir würden da eigentlich nur obskure DSLs einfallen, aber da wäre man in Python sowieso mit externen DSLs die auf spezielle Dictionaries zugreifen besser dran.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

Samstag 25. Oktober 2008, 18:23

BlackVivi hat geschrieben:
audax hat geschrieben:

Code: Alles auswählen

In [1]: for i in xrange(10):
   ...:     locals()['foo_%d' % i] = i
   ...:     
   ...:     

In [2]: foo_2
Out[2]: 2

In [3]: foo_5
Out[3]: 5
Das geht alles ;)
Grrr, bring Leuten gar nicht erst sowas bei... Natürlich geht alles, aber wenn man sowas in Produktivcode macht...
Und die Dokumentation sagt zu `locals()` eigentlich:
Warning: The contents of this dictionary should not be modified; changes may not affect the values of local variables used by the interpreter.
"Der Dumme erwartet viel. Der Denkende sagt wenig." ("Herr Keuner" -- Bertolt Brecht)
DasIch
User
Beiträge: 2452
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Samstag 25. Oktober 2008, 18:57

Trundle hat geschrieben:Und die Dokumentation sagt zu `locals()` eigentlich:
Warning: The contents of this dictionary should not be modified; changes may not affect the values of local variables used by the interpreter.
Nichts was sich nicht umgehen liesse.

Code: Alles auswählen

In [34]: for i in xrange(10):
    setattr(__builtins__, 'foo_%d' % i, i)
   ....:
   ....:

In [36]: foo_2
Out[36]: 2

In [37]: foo_5
Out[37]: 5
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Samstag 25. Oktober 2008, 18:59

Dann eben nur auf Modulebene mit globals() ;)

€dit:
was aufs gleiche wie bei meinem Vorposter hinausläuft.
Antworten