Dynamisch erzeugte Variablennamenin Python?

Gast #1026477
Lesenswert?

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.
#1026576
Lesenswert?

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 #1026597
Lesenswert?

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 #1026610
Lesenswert?

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 #1026750
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren