PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Python: Variablennamen nicht interpolieren



RAHUL
09-04-2007, 19:19
Hallo,

ich hab recht frisch mit Python angefangen und habe eine bescheidene Frage,
am besten am Beispiel verdeutlicht:



>>> a, b, c =1,2,3
>>> for j in (a, b, c):
... print j
...
1
2
3


Ich möchte, dass aber a, b, c ausgedruckt werden, bzw eigentlich will ich beides,
sowas wie



a: 1
b: 2
c: 3


als Ausgabe...

Da es ja keinen eigentlichen Variablen in Python gibt, sondern nur Namen und Objekte, erscheint mir das nicht so einfach,
hab jetzt auch schon 1 Stunde im Netz geschaut und keine Erleuchtung erhalten.

MfG
Rahul

nidhoegg
19-04-2007, 11:41
Hallo, ich kenne mich nicht besonders gut mit Python aus, aber da noch keiner geantwortet hat, hilft es vielleicht trotzdem. ;)
Soweit mir bekannt, ist das, was Du tun willst nicht ohne weiteres möglich.
Du müsstest den Variablennamen per Hand ausgeben lassen.
Eine Idee, die ich noch habe wäre, dass Du Deine Variablen in einem Dictionary speicherst.
http://docs.python.org/tut/node7.html#SECTION007500000000000000000
Damit hast Du ein Schlüssel-Wert-Paar, was Du dann (in einer Schleife) ausgeben kannst.

Gruß, nidhoegg

RapidMax
20-04-2007, 20:23
nidhoegg zeigt den richtigen Ansatz.

a, b und c wird ein Wert zugewiesen:

(a, b, c) = (1, 2, 3)
entspricht

a = 1
b = 2
c = 3
Genau gesagt ist die Variable ein Name für eine Referenz auf das Integer-Objekt 1.
An diesen Namen kommst du nicht so ohne weiteres heran, was normalerweise auch nicht notwendig ist. Das hat dann mit Sprach-Introspektion zu tun, was in Python einigermassen einfach ist (vars() liefert ein dictionary u.a. mit a, b, c).

Was du ja eigentlich wolltest, sind die Werte für a, b und c auszugeben. In Python löst man das üblicherweise mit einem Dictionary:

d = { 'a' : a, 'b' : b, 'c' : c }
for n, v in d.iteritems():
print n, v
Die zweite Alternative ist wie schon erwähnt, das Dictionary des lokalen namespace:

for name in ('a', 'b', 'c'):
print name, '=', vars()[name]

Gruess, Andy

ThorstenS
24-04-2007, 13:19
dir ist ein kleiner typo unterlaufen, ich berichtige es mal

Python löst man das üblicherweise mit einem Dictionary:

d = { 'a' : 1, 'b' : 2, 'c' : 3 }
for n, v in d.iteritems():
print n, ": ", v

Ergibt das gewünschte (unsortierte):
a : 1
c : 3
b : 2