Seite 1 von 1
Ursprünglicher Name einer Variablen/Instanz
Verfasst: Freitag 19. November 2004, 11:58
von jens
Für eine kleine Debug-Ausgabe währe es nicht schlecht, zu wissen, wie der Ursprüngliche Variablen-Name ist.
Ein Beispiel erklärt es wohl besser, was ich will:
Code: Alles auswählen
def Debug ( daten ):
print "Inhalt von:",name(daten)
print daten
VariablenName = "BlaBla"
Debug( VariablenName )
Ich hätte gern folgende Ausgaben:
name() ist natürlich nicht der richtige Weg, sondern nur ein Beispiel...
Verfasst: Freitag 19. November 2004, 12:27
von Dookie
Hi jens,
leider geht das so nicht, da man zwar Objekte an Namen binden kann (das machst du mit der Zuweisung
varname = variable), diese Objekte aber keine Ahnung haben welche Namen sie haben. Hätte auch wenig Sinn, wenn du z.B. an Objekte in Listen oder Tuples.
Du kannst höchstens sowas versuchen:
Code: Alles auswählen
def name(daten):
for key, value in globals().iteritems():
if value is daten: # Identisches Objekt?
return key
else:
return "***unknown***"
def Debug ( daten ):
print "Inhalt von:",name(daten)
print daten
VariablenName = "BlaBla"
Debug( VariablenName )
Versagt aber in vielen Fällen, z.B. bei kleinen Integerwerten oder eben Daten in Listen, Tuples oder Dictionaries.
Gruß
Dookie
Verfasst: Freitag 19. November 2004, 12:27
von oenone
das wird nicht gehen, da die Debug-funktion gar nicht die variable "VariablenName" kennt... sie bekommt lediglich die variable "daten". deshalb würde sie auch nur diese ausgeben können.
auf bald
oenone
Verfasst: Freitag 19. November 2004, 12:33
von jens
Es war natürlich dafür gedacht, mehrere "Formatierte" Ausgaben einfach zu lösen, (eigentlich Inhalte von Dictionaries):
Code: Alles auswählen
def Debug ( daten ):
print "Inhalt von:",name(daten)
print daten,"\n"
VariablenName = "BlaBla"
Debug( VariablenName )
AndereVariable = "foobar"
Debug( AndereVariable )
Code: Alles auswählen
Inhalt von: VariablenName
BlaBla
Inhalt von: AndereVariable
foobar
Da es aber wohl nicht so einfach geht, macht es keinen Sinn, denn die Einsparung ist dadurch nicht mehr gegeben...
Eine "einfachere" Lösung, aber mit mehr Handarbeit, ist also Sinnvoller:
Code: Alles auswählen
def Debug ( daten, VarName ):
print "Inhalt von:",VarName
print daten,"\n"
VariablenName = "BlaBla"
Debug( VariablenName, "VariablenName" )
AndereVariable = "foobar"
Debug( AndereVariable, "AndereVariable" )
Verfasst: Freitag 19. November 2004, 17:44
von oenone
du koenntest auch eval benutzen...
z.b. so:
Code: Alles auswählen
def Debug( variable ):
print "Inhalt von:", variable
print eval( variable ), "\n"
Var1 = "blabla"
Debug( "Var1" )
Var2 = "foobar"
Debug( "Var2" )
auf bald
oenone
Verfasst: Freitag 19. November 2004, 17:57
von Dookie
und was bringt eval da?
Dookie
Verfasst: Freitag 19. November 2004, 18:25
von jens
Im obrigen Beispiel würde es ja gehen... Mittlerweile hab ich weiter gebastelt und nun ist es nicht mehr einfach eine Variable, sondern ein Rückgabewert einer Funktion... Da wäre der Funktionsname interessant...
Naja, mit meiner billig-von-hand-mach-lösung komm ich schon zurecht...
Verfasst: Samstag 20. November 2004, 12:42
von oenone
Dookie hat geschrieben:und was bringt eval da?
Dookie
ohne eval wuerde es nur den namen der variablen, nicht deren inhalt ausgeben.
auf bald
oenone
Verfasst: Samstag 20. November 2004, 14:08
von Dookie
agso, klar, solltest aber besser als Parameterbezeichner dann variablenname verwenden statt variable.
Dookie