如何将字符串转换为全局函数内部实例化的变量名



很抱歉出现这个令人困惑的标题,在我的函数中,我的参数是我想要设置为全局变量名的名称。我可以在函数之外完成这项工作,并且我可以实例化一个全局变量,而不使用字符串作为其名称,而且我还没有找到任何其他文章同时解决这两个问题。

def myFunc(varName):
temp = varName
# global vars()[temp]  <== This line produces the error
vars()[temp] = 5  # varName becomes a local variable

您可以使用globals函数来实现这一点:

def set_global_var(name, value):
globals()[name] = value

if __name__ == '__main__':
set_global_var('foo', 3)
print(foo)

请注意,在大多数情况下,这不是一个好主意。您可能希望使用全局dict对象,并简单地为其分配新密钥

使用global,就像这样(注意,在调用fun1之前,some_text是未知的):

def fun1():
global some_text
some_text = "1234"
def fun2():
print(some_text)
fun1()
fun2()

正如人们所期望的那样,这将产生1234,请参见ideone.com上的演示。


所以,在您的情况下,只需选择

def myFunc(varName):
global TEMP
TEMP = varName

问题仍然存在:你为什么要这么做?不要用只有类/函数需要的变量来扰乱全局命名空间。

最新更新