Forum: PC-Programmierung Dynamisch erzeugte Variablennamenin Python?


von Klaus2 (Gast)


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.

von Günter -. (guenter)


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

von Stefan B. (stefan) Benutzerseite


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.

von Klaus2 (Gast)


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.

von Stefan B. (stefan) Benutzerseite


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/

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.