代码之家  ›  专栏  ›  技术社区  ›  OTZ

在python中有没有方法将变量id/symbol字符串化?

  •  2
  • OTZ  · 技术社区  · 16 年前

    我想知道是否有可能在python中进行字符串化 变量id/symbol——即一个函数,其行为如下:

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

    现在,在函数或类(如果它是 直接引用对象):

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

    但我正在寻找一种适用于所有情况的通用方法, 即使对于间接对象引用也是如此。我不知怎么想的 使用ID(var),但还没有运气。

    有什么办法吗?

    3 回复  |  直到 15 年前
        1
  •  4
  •   Tarantula    16 年前

    这是,我相信你能把它变成一个更好的形式=)

    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)。

        2
  •  3
  •   unbeli    16 年前

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

    >>> 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
    
        3
  •  0
  •   OTZ    15 年前

    答案是“不可能”。