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

dsa*_*avi 66 python string variables

为简单起见,这是我想要做的精简版:

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

我知道如何在PHP中执行此操作:

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

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

有什么办法吗?

Edw*_*per 106

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

>>> a = 5
>>> globals()['a']
5
Run Code Online (Sandbox Code Playgroud)

关于各种"eval"解决方案的注意事项:你应该小心eval,特别是如果你正在评估的字符串来自可能不受信任的来源 - 否则,你最终可能会删除磁盘的全部内容或类似的东西如果给你一个恶意字符串.

(如果不是全球性的,那么你就需要访问任何的命名空间中的已定义.如果你没有这样的,有没有办法,你就可以访问它.)

  • 本地人的`locals()`. (39认同)

ere*_*nce 42

Edward Loper的答案仅在变量位于当前模块中时才有效.要在另一个模块中获取值,您可以使用getattr:

import other
print getattr(other, "name_of_variable")
Run Code Online (Sandbox Code Playgroud)

https://docs.python.org/2/library/functions.html#getattr

  • 而且,如果您想使用此方法在调用getattr()的同一模块中获取值,请使用import sys;。sys.modules [__ name __]`以获得对当前模块的引用。 (3认同)

sta*_*ark 16

>>> string = "blah"
>>> string
'blah'
>>> x = "string"
>>> eval(x)
'blah'
Run Code Online (Sandbox Code Playgroud)

  • [**永远不要对可能以任何形式来自程序外部的数据使用“eval”(或“exec”)。这是一个严重的安全风险。您允许数据​​作者在您的计算机上运行任意代码。**](/sf/ask/128305831/) (4认同)

max*_*axm 8

>>> x=5
>>> print eval('x')
5
Run Code Online (Sandbox Code Playgroud)

田田!

  • 安全漏洞:“**tada!**”。 (6认同)
  • [**永远不要对可能以任何形式来自程序外部的数据使用“eval”(或“exec”)。这是一个严重的安全风险。您允许数据​​作者在您的计算机上运行任意代码。**](/sf/ask/128305831/) (3认同)