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,bar和baz是"正确"的答案?它们都指的是完全相同的对象.
PS以上是我之前写过的一个有点编辑的答案版本. 我想这次我的措辞做得更好了.
我相信你想要的一般形式repr()或__repr__()对象的方法.
关于__repr__():
由repr()内置函数和字符串转换(反向引号)调用,以计算对象的"官方"字符串表示形式.
请参阅此处的文档:对象.repr(个体经营)