Den Namen einer Variable ausgeben, nicht deren Wert

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
sponk
User
Beiträge: 10
Registriert: Montag 12. November 2007, 13:28

Den Namen einer Variable ausgeben, nicht deren Wert

Beitragvon sponk » Dienstag 18. Dezember 2007, 16:40

Hallo!

Habe folgendes Problem:
Ich habe eine Funktion definiert und möchte als Ausgabe den Variablennamen und nicht dessen Wert.

Stelle mir das so in der Art vor:

Code: Alles auswählen

def func(x):
 print str(x)

Jetzt würde ich gerne für func(A) einfach ein 'A' ausgegeben bekommen und nicht den Wert davon.

Danke und Grüße!
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Beitragvon Darii » Dienstag 18. Dezember 2007, 16:59

Code: Alles auswählen

print 'A'


Was willst du denn machen? So wie du dir das vorstellst, wird das nicht funktionieren. Das Objekt x enthält ja keine Informationen darüber, wie es gerade heißt oder hieß(intern wird das vom Interpreter evtl. irgendwo gespeichert, aber da kommt man nicht dran).

Stell dir die Variable(den Namen des Objekts) wie einen Klebezettel vor, der an dem Objekt klebt. Das Objekt weiß weder durch welchen der vielen Klebezettel die auf ihm kleben es gerade gefunden wurde noch was auf der anderen Seite der Zettel steht.
Zuletzt geändert von Darii am Dienstag 18. Dezember 2007, 17:05, insgesamt 1-mal geändert.
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

Beitragvon BlackVivi » Dienstag 18. Dezember 2007, 17:02

Ich weiß, was du machen willst... und weiß spontan 2 Lösungen:

Du arbeitest mit **kwargs oder direct mit einem Dict.

Code: Alles auswählen

def foo(**kwargs):
    for i, j in kwargs.iteritems():
        print i + ": " + j

foo(A="abc, B="bcs")


Und bei Dicts solltest du dich selber mal durchlesen...
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Beitragvon CM » Dienstag 18. Dezember 2007, 17:03

Klar "weiß" eine Funktion welche "Variablen" sie hat:

Code: Alles auswählen

def foo(x): print locals()

Aber: Was willst Du denn tatsächlich erreichen? Vielleicht gibt es ja eine etwas pythonischere Herangehensweise?

Gruß,
Christian
sponk
User
Beiträge: 10
Registriert: Montag 12. November 2007, 13:28

Beitragvon sponk » Dienstag 18. Dezember 2007, 17:05

Na gut, dann muss ich doch weiter ausholen:

ich will eine Funktion schreiben, mit der man Matrizen auf ihre Symmetrie untersuchen kann. Da ich das für verschiedene Matrizen anwenden will, hab ich folgedes geschrieben:

Code: Alles auswählen

def symm(x):
   if all(x.transpose() == x):
      print str(x)+' ist symmetrisch!'
   else:
      print str(x)+' ist nicht symmetrisch!'

wenn ich nun eine Matrix A (wird vorgegeben) habe und den Befehl symm(A) ausfühe, soll eben "A ist symmetrisch!" bzw. "A ist nicht symmetrisch" rauskommen.
BlackJack

Beitragvon BlackJack » Dienstag 18. Dezember 2007, 17:07

@sponk: Es gibt Namen und Objekte. An ein Objekt kann man beliebig viele Namen binden, oder auch gar keinen. Damit weiss man nicht *welchen* Namen, aus welchem Namensraum man ausgeben kann/soll, bzw. was soll man machen wenn ein Objekt an gar keinen Namen gebunden ist!?

Was sollte die hypothetische Funktion hier jeweils ausgeben?

Code: Alles auswählen

a = b = 42
func(a)
func(b)
func(42)
func(23)
func(int())
c = [a + 1]
func(c[0])


Die Ausgabe musst Du an der Stelle machen wo Du weisst, dass der Name `A` ist. Anders geht das nicht.

@CM: `locals()` kennt `x` weiss aber nicht das das Objekt auch unter dem Namen `A` erreichbar ist.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Beitragvon CM » Dienstag 18. Dezember 2007, 17:12

BlackJack hat geschrieben:@CM: `locals()` kennt `x` weiss aber nicht das das Objekt auch unter dem Namen `A` erreichbar ist.

Wohl wahr. Habe ich gerade glatt ignoriert. Sorry.
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Samstag 29. März 2008, 11:17

sponk hat geschrieben:wenn ich nun eine Matrix A (wird vorgegeben) habe und den Befehl symm(A) ausfühe, soll eben "A ist symmetrisch!" bzw. "A ist nicht symmetrisch" rauskommen.

Dann übergib doch nicht nur die Werte, sondern auch den Namen der Matrix. Das wäre eine saubere Lösung. Oder erstelle ein dict und übergib das, z.B.:

Code: Alles auswählen

matrix = {
    "name": "Die Matrix A",
    "werte": ...
}


Die Frage ist: Woher kommt die Matrix, der Namen und die Daten?

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder