Dynamisch erzeugte Variablennamenin Python?

Gast #1026477
Hallo,

wie kann ich in Python dynamische Variablennamen erzeugen?

Ich möchte quasi einen Variable VAR erzeugen, die aber einen 
fortlaufenenden index hat - dieser wird per argument übergeben:

def var(index):

VAR(index) := 12345;

...

Je nachdem, welchen Wert index hat, soll die VAR nun 1 oder 5 oder was 
auch immer sein.

'T' + str(index) := 12345;

Gibts da was? exec und eval tuns da ja wohl nicht, oder?

Klaus.
Gast
Alle Variablen werden in Python in einem dict gespeichert. Anzeigen kann 
man das durch locals():
1
>>> locals()
2
{'__builtins__': <module '__builtin__' (built-in)>, '__file__': '/etc/pythonstart', '__name__': '__main__', '__doc__': None}
3

4
>>> a = 1
5
>>> locals()
6
{'a': 1, '__builtins__': <module '__builtin__' (built-in)>, '__file__': '/etc/pythonstart', '__name__': '__main__', '__doc__': None}

Entsprechend kann man natürlich auch neue Keys erzeugen:
1
>>> locals()["x"] = 2
2
>>> locals()
3
{'a': 1, '__builtins__': <module '__builtin__' (built-in)>, '__file__': '/etc/pythonstart', 'x': 2, '__name__': '__main__', '__doc__': None}
4
>>> x
5
2
Persönliche Seite
Seltsamer Ansatz vom Klaus2. Erinnert mich an Templates bei C++.

Wäre es nicht sinnvoller bzw. pythontypischer, dass die Funktion var 
neu angelegte Instanzen in einer Liste oder einem Dictionary führt?

Eine Liste würde man nehmen, wenn index direkt eine Indizierung in der 
Liste erlaubt. In anderen Programmiersprachen wäre das mit 
Feldern/Arrays vergleichbar.

Ein Dictionary würde man nehmen, wenn der Zugriff über einen String 
(z.B. zusammengebastelt wie oben) erfolgen soll. In anderen 
Programmiersprachen wäre das mit assoziativen Arrays vergleichbar.
Gast
Ja, danke - ich habe es jetzt anders gelöst, weil die dyn Erzeugung von 
Variablennamen wohl ziemlich gefährlich ist (Egal, in welcher Sprache). 
Meine Python Kenntnisse sind 48 Stden alt, daher erwartet nicht zuviel, 
bitte :)

Klaus.
Persönliche Seite
Die Tutorials geordnet für Leser == Nicht-Programmierer bis Leser == 
auf Python umsteigender Programmierexperte...

*Non-Programmer's Tutorial for Python*
by Josh Cogliati
http://en.wikibooks.org/wiki/Non-Programmer%27s_Tutorial_for_Python

Learning to Program
by Alan Gauld
http://www.freenetpages.co.uk/hp/alan.gauld/

How to think like a computer scientist
by Jeffrey Elkner, Allen B. Downey and Chris Meyers
http://www.openbookproject.net/thinkCSpy/

The Python Tutorial
by Guido van Rossum
http://docs.python.org/tutorial/
DE: http://python.net/~gherman/publications/tut-de/online/tut/

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.