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

How do you make a string converted to a variable name instantiated inside of a function global?

对不起,这个令人困惑的标题,在我的函数中,我的参数是我想要设置为全局变量名的名称。我可以在函数之外执行此操作,并且可以实例化一个全局变量而不用字符串作为名称,而且我还没有找到任何其他文章同时解决这两个问题。

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

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

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

def fun2():
    print(some_text)

fun1()
fun2()

这会产生 1234 正如人们所期望的那样,请参阅 a demo on ideone.com


所以,在你的情况下,只需要

def myFunc(varName):
    global TEMP
    TEMP = varName

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

可以使用globals函数来实现:

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


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

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