在Python中用字符串化变量id / symbol的任何方法?

时间:2010-06-08 19:27:11

标签: python

我想知道在python中是否可以进行stringify 变量id / symbol - 即一个行为如下的函数:

>>> symbol = 'whatever'
>>> symbol_name(symbol)
'symbol'

现在,很容易在函数或类上执行它(如果它是一个 直接引用对象):

>>> def fn(): pass
>>> fn.func_name
'fn'

但我正在寻找一种适用于所有情况的通用方法, 甚至对于间接对象引用。我想到了某种程度 使用id(var),但没有运气。

有什么办法吗?

3 个答案:

答案 0 :(得分:4)

这是,我相信你可以把它变成更好的形式=)

def symbol_name(a):
    for k,v in globals().items():
        if id(a)==id(v): return k

更新:正如unbeli所说,如果你有:

a = []
b = a

该函数无法显示正确的名称,因为id(a)== id(b)。

答案 1 :(得分:3)

我不认为这是可能的。即使是函数,也不是变量名:

>>> def fn(): pass
... 
>>> fn.func_name
'fn'
>>> b=fn
>>> b.func_name
'fn'
>>> del fn
>>> b.func_name
'fn'
>>> b()
>>> fn()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'fn' is not defined

答案 2 :(得分:0)

“不可能”就是答案。