2017-11-13 3 views
0

Ich habe mich in den Foren umgeschaut und ich kann anscheinend keine Antwort finden (und vielleicht gibt es auch keine), ob Sie den Namen einer Variablen oder den Wert bekommen können, indem Sie ihren Speicherort in Python verwenden . Mit anderen Worten, wenn ich a = 10 deklariere und der Variablen 'a' den Wert 10 zuweise, und dann die Funktion id() auf 'a' verwende, bekomme ich den Speicherort im Speicher, wo der Wert für 'a' gespeichert ist. Gibt es eine Möglichkeit, sagen wir, den Variablennamen ('a') oder den Wert ('10') durch den Verweis auf den Wert (entweder den Dezimalwert oder die Konvertierung des Dezimalwerts in Hex mit der Funktion) zurückgeben? Ich habe versucht ein paar Dinge wie print(id(variable-name)) und nur print(decimal-value-from-id) und kein Glück. Jede Hilfe würde sehr geschätzt werden und danke im Voraus!Python-Variablenname oder -Wert vom Speicherort holen?

Prost!

+4

Warum möchten Sie das tun? – wwii

+2

Nein. Tatsächlich ist 'id (obj)' der Speicherort im Speicher von 'obj' ein CPython-Implementierungsdetail und sollte nicht auf –

+0

beruhen. Sie könnten dies wahrscheinlich in einer C-Erweiterung tun, aber nicht pure python –

Antwort

0

Dies ist möglich mit ctypes:

import ctypes 
a = 10 
ctypes.cast(id(a), ctypes.py_object).value 
#10 

Dies wird natürlich Arbeit, wenn das Objekt noch da ist.

+0

Ich bin sehr versucht, dies zu verwerfen ... Sie können garantieren, dass es nur existiert, wenn * Sie * einen Verweis auf diese Variable haben, in diesem Fall könnten Sie es tatsächlich irgendwo indexierbar mit der ID speichern. –

+0

Ihre Bedenken sind vorhanden und ich würde dies nicht in der Produktion vorschlagen. Dennoch wollte OP das tun. – zipa

+0

Zipa, ich danke Ihnen für Ihre Antwort und das ist, was ich gesucht habe. Der Grund, warum ich gepostet habe, war, dass ich eine Konversation über veränderbar vs. unveränderlich führte und die ID() -Funktion verwendete, um zu zeigen, dass veränderbare Objekte wie Listen an Ort und Stelle geändert werden können (wobei id() den gleichen Speicherwert/Speicherort zurückgibt) Ganzzahl- oder Zeichenfolgenvariablenname gibt bei Änderung einen neuen Wert für id() zurück (kann also nicht geändert werden). Wurde gefragt, wie ich den von id() generierten Speicherplatzwert nehmen könnte, um den Namen oder Wert der Variablen zu erhalten, die an dieser Stelle gespeichert ist - quasi ein Reverse-Engineer sozusagen. Vielen Dank!! –