Ich wollte es zum Debuggen, also habe ich es selbst gemacht.
In Python gibt es eine integrierte Variable im Namespace. Suchen Sie also danach.
(Verwenden Sie die Namespace-Variablen local ()
und globals ()
.)
Die Referenz der Variablen ist nicht eindeutig, aber das Referenzziel der Variablen ist eindeutig (... nicht wahr?).
(Verwenden Sie die Bezeichnerfunktion id ()
.)
def getVarsNames( _vars, symboltable ) :
"""
This is wrapper of getVarName() for a list references.
"""
return [ getVarName( var, symboltable ) for var in _vars ]
def getVarName( var, symboltable, error=None ) :
"""
Return a var's name as a string.\nThis funciton require a symboltable(returned value of globals() or locals()) in the name space where you search the var's name.\nIf you set error='exception', this raise a ValueError when the searching failed.
"""
for k,v in symboltable.iteritems() :
if id(v) == id(var) :
return k
else :
if error == "exception" :
raise ValueError("Undefined function is mixed in subspace?")
else:
return error
if __name__ == "__main__":
a = 4
b = "ahoo"
print getVarsNames([a,b,"c"],locals())
Dies ist der Rückgabewert.
['a', 'b', None]
wie wäre es mit? Was passiert, wenn Sie überlappende verschachtelte Funktionen aufrufen?
Nachtrag: Sie können gerne Ausnahmen senden