如何在python中获取变量的字符串表示?

Joh*_*han 6 python introspection

我在python中有一个变量x.如何从变量中找到字符串'x'.这是我的尝试:

def var(v,c):
  for key in c.keys():
    if c[key] == v:
      return key


def f():
  x = '321'
  print 'Local var %s = %s'%(var(x,locals()),x)  

x = '123'
print 'Global var %s = %s'%(var(x,locals()),x)
f()
Run Code Online (Sandbox Code Playgroud)

结果是:

Global var x = 123
Local var x = 321
Run Code Online (Sandbox Code Playgroud)

上面的食谱似乎有些不同寻常.是否有更好/更短的方法来实现相同的结果?

ste*_*eha 13

问:我在python中有一个变量x.如何从变量中找到字符串'x'.

答:如果我正确理解你的问题,你想要从变量的值到它的名字.这在Python中实际上是不可能的.

在Python中,确实没有任何"变量"这样的东西.Python真正拥有的是"名称",它们可以绑定对象.它对象可能会绑定哪些名称(如果有的话)没有区别.它可能会绑定几十个不同的名称,或者没有.

考虑这个例子:

foo = 1
bar = foo
baz = foo
Run Code Online (Sandbox Code Playgroud)

现在,假设您有一个值为1的整数对象,并且您想要向后工作并找到它的名称.你会打印什么?三个不同的名称将该对象绑定到它们,并且所有这些都同样有效.

print(bar is foo) # prints True
print(baz is foo) # prints True
Run Code Online (Sandbox Code Playgroud)

在Python中,名称是访问对象的一种方式,因此无法直接使用名称.您可以搜索locals()以查找值并恢复名称,但这最多只是一个客厅技巧.而在我上面的例子中,其中foo,barbaz是"正确"的答案?它们都指的是完全相同的对象.

PS以上是我之前写过的一个有点编辑的答案版本. 我想这次我的措辞做得更好了.


Gab*_*ley 7

我相信你想要的一般形式repr()__repr__()对象的方法.

关于__repr__():

由repr()内置函数和字符串转换(反向引号)调用,以计算对象的"官方"字符串表示形式.

请参阅此处的文档:对象.repr(个体经营)