Ich würde gerne variable Variablennamen (mit php: $$variablenname) benutzen und suche eine Lösung für Python.
Kann mir jemand helfen?
variable Variablennamen
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
Hi Gast,
die einzige Möglichkeit sehe ich über eval und exec. Z.B.:
ich kann zwar auch ein bissche php, habe aber variable Variablennamen noch nie gebraucht und verstehe ehrlichgesagt auch nicht wofür die gut sein sollen, solche sachen lassen sich doch mit Dictionarys viel besser und auch übersichtlicher lösen?
Gruß
Dookie
die einzige Möglichkeit sehe ich über eval und exec. Z.B.:
Code: Alles auswählen
>>> a = 2
>>> b = "a"
>>> print eval(b)
2
>>> exec(b+"= 4")
>>> print a
4
>>>
Gruß
Dookie
-
- Gründer
- Beiträge: 410
- Registriert: Dienstag 30. Juli 2002, 18:03
- Wohnort: Oestrich-Winkel
- Kontaktdaten:
Variable Variablen sind, meiner Meinung nach, absolut schlechter Stil!
Wo bleibt die Übersicht? In der Mathematik wird ein 'x' ja auch nicht plötzlich zu einem 'w'.
Eine Variable ist nur ein Platzhalter, und den sollte man siche, bevor man anfängt zu Programmieren, im Entwurf und Design schon überlegen. Eindeutig sollte er sein, um damit die Wartbarkeit des Codes zu gewährleisten.
Also, ich würde nach einer Lösung suche, die keine Variablen Variabeln (was für ein Ausdruck ) benutzt oder benötigt. Und eine solche Lösung gibt es GARANTIERT!
Wo bleibt die Übersicht? In der Mathematik wird ein 'x' ja auch nicht plötzlich zu einem 'w'.
Eine Variable ist nur ein Platzhalter, und den sollte man siche, bevor man anfängt zu Programmieren, im Entwurf und Design schon überlegen. Eindeutig sollte er sein, um damit die Wartbarkeit des Codes zu gewährleisten.
Also, ich würde nach einer Lösung suche, die keine Variablen Variabeln (was für ein Ausdruck ) benutzt oder benötigt. Und eine solche Lösung gibt es GARANTIERT!
irc: #python.de @ irc.freenode.net | [url=http://pythonwiki.pocoo.org]python-wiki[/url] | [url=http://www.pythonwiki.de/PythonDeForum/Faq]python-forum FAQ[/url]
Das klingt super und ist genau das, was ich brauche!
Nur leider meint Zope:
Exec statements are not allowed.
bzw.:
global name 'eval' is not defined
Konkret habe ich das folgende Problem:
Ich habe in Zope Objekte, auf deren Werte ich in der Form
zugreifen kann. Jetzt möchte ich alle Werte ausgeben und dachte, dass so etwas wie
in einer Schleife eine klasse Lösung wäre ...
Bessere Vorschläge werden sehnsüchtigst erwartet ...
Nur leider meint Zope:
Exec statements are not allowed.
bzw.:
global name 'eval' is not defined
Konkret habe ich das folgende Problem:
Ich habe in Zope Objekte, auf deren Werte ich in der Form
Code: Alles auswählen
container.data.entry_XXX.wert
Code: Alles auswählen
tmp = "%s%i%s" % ("container.data.entry_",i,".wert")
eval(tmp)
Bessere Vorschläge werden sehnsüchtigst erwartet ...
-
- User
- Beiträge: 69
- Registriert: Donnerstag 29. August 2002, 17:10
- Wohnort: Erfurt
- Kontaktdaten:
Ich verbesser mal deine Lösung, sofern ich darf (kA obs geht )
Code: Alles auswählen
tmp = str(container.data.entry_)+str(i)+".wert"
eval(tmp)
muss ich eval() irgendwo explizit importieren?
Oder warum meint Zope "global name 'eval' is not defined"
Oder warum meint Zope "global name 'eval' is not defined"
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
Hi nochmal,
exec und eval sind Builtinfunktionen von Python. Brauchen also nicht importiert zu werden. Leider kenn ich mich mit Zope nicht aus, aber mir stellen sich da noch ein paar Fragen.
Für mich schaut das so aus, als wäre container.data ein Objekt das "entry_xxx" Einträge als Attribute enthält. Eine, allerdings IMHO nicht sehr schöne Lösung währe die Liste der Attribute container.data.__dict__ zu duchforsten nach Einträgen deren Key mit "entry_" beginnen und deren werte dann auszugeben.
Du schreibst auch daß Du diese in einer Schleife ausgeben willst. Wenn die Objekte von selbergeschriebenen Programmen erzeugt werden, sollte es kein Problem sein statt den Einträgen entry_xxx eine Liste die dann über container.data.entry.wert z.B. angesprochen wird daraus zu machen.
Denkbar wäre auch eine Implementierung von container.data als Dictionary, dessen Einträge über container.data["entry_%i" %i].wert angesprochen werden.
Mir scheint Du hast da schon in der Implementation eine Hund drinn. Wenn Du mal näher beschreibst, was das Ganze eigentlich machen soll, können wir Dir sicher besser helfen.
Gruß
Dookie
exec und eval sind Builtinfunktionen von Python. Brauchen also nicht importiert zu werden. Leider kenn ich mich mit Zope nicht aus, aber mir stellen sich da noch ein paar Fragen.
Für mich schaut das so aus, als wäre container.data ein Objekt das "entry_xxx" Einträge als Attribute enthält. Eine, allerdings IMHO nicht sehr schöne Lösung währe die Liste der Attribute container.data.__dict__ zu duchforsten nach Einträgen deren Key mit "entry_" beginnen und deren werte dann auszugeben.
Code: Alles auswählen
entrys = filter(lambda x: x[:6] == "entry_", containter.data.__dict__.keys())
for entry in entrys:
print container.data.__dict__[entry].wert
Denkbar wäre auch eine Implementierung von container.data als Dictionary, dessen Einträge über container.data["entry_%i" %i].wert angesprochen werden.
Mir scheint Du hast da schon in der Implementation eine Hund drinn. Wenn Du mal näher beschreibst, was das Ganze eigentlich machen soll, können wir Dir sicher besser helfen.
Gruß
Dookie
Verwendest Du sowas wie PythonScripts?
Da hast du dann nämlich kein "normales" sondern ein restricted python. Das kann so etwas wg. Security nicht. Ein Freund von mir hatte das Problem ... und zack waren die Security-Methoden aus dem Code entfernt. Wenn Du Interesse an so einem entfesselten Python als PythonScripts hast sags mir.
Da hast du dann nämlich kein "normales" sondern ein restricted python. Das kann so etwas wg. Security nicht. Ein Freund von mir hatte das Problem ... und zack waren die Security-Methoden aus dem Code entfernt. Wenn Du Interesse an so einem entfesselten Python als PythonScripts hast sags mir.
Ja, ohne die Verwendung von exec oder eval() komme ich nicht weiter ...
Wäre klasse, wenn Du mir da weiterhelfen könntest!
Wäre klasse, wenn Du mir da weiterhelfen könntest!
Ich habe mein Profil (hier) geändert, sodaß meine Emailadresse angezeigt wird. Schreib mir eine Email (damit ich Deine Email-Adresse bekomme). Zum ins Netz stellen ist diese Modifikation einfach zu "brutal". Einige Zope-Jünger würden einen für sowas lynchen