如何获取字符串中给定名称的变量的值?

为了简单起见,这是我想要做的事情的一个精简版本:

def foo(a):
# I want to print the value of the variable
# the name of which is contained in a

我知道如何在 PHP 中做到这一点:

function foo($a) {
echo $$a;
}


global $string = "blah"; // might not need to be global but that's irrelevant
foo("string"); // prints "blah"

有什么办法吗?

189354 次浏览
>>> x=5
>>> print eval('x')
5

看!

假设您知道字符串可以安全地求值,那么 eval 将在当前上下文中给出变量的值。

>>> string = "blah"
>>> string
'blah'
>>> x = "string"
>>> eval(x)
'blah'

如果它是一个全局变量,那么可以这样做:

>>> a = 5
>>> globals()['a']
5

关于各种“ eval”解决方案的注意事项: 您应该小心 eval,特别是如果您正在计算的字符串来自一个潜在的不可信源——否则,如果给您一个恶意字符串,您可能最终会删除磁盘的整个内容或类似的内容。

(如果它不是全局的,那么您需要访问它所定义的任何名称空间。如果你没有这个,你就没有办法访问它。)

Edward Loper 的回答只有当变量在当前模块中时才有效。要获取另一个模块中的值,可以使用 getattr:

import other
print getattr(other, "name_of_variable")

Https://docs.python.org/3/library/functions.html#getattr