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:

Code: Alles auswählen

Inhalt von: VariablenName
BlaBla
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