如何将字符串转换为在全局函数内部实例化的变量名?
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
对象并简单地为其分配新键。
对不起,这个令人困惑的标题,在我的函数中,我的参数是我想要设置为全局变量名的名称。我可以在函数之外执行此操作,并且可以实例化一个全局变量而不用字符串作为名称,而且我还没有找到任何其他文章同时解决这两个问题。
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
对象并简单地为其分配新键。