全局变量在使用 exec 时不起作用



每当我用下面的代码片段执行代码时,它都能很好地工作。

def set_globvar_to_one():
global globvarq
globvarq = 2
def print_globvar():
print(globvarq)
set_globvar_to_one()
print_globvar()

但是,在我的情况下,我需要使用exec命令来执行这个片段,因为我的代码是动态的。所以,我试着跟随。

def set_globvar_to_one():
exec(compile("global globvarq","setglobal","exec"))
exec(compile("globvarq = 2","setglobal","exec"))
def print_globvar():
eval(compile("print(globvarq)","setglobal","eval")) 
set_globvar_to_one()
print_globvar()

并且此代码引发以下错误。

Traceback (most recent call last):
print_globvar()
eval(compile("print(globvarq)","setglobal","eval"))
File "setglobal", line 1, in <module>
NameError: name 'globvarq' is not defined

如何从一个方法使变量全局化,并在另一个方法中使用相同的变量?

我不确定你实际想要实现什么,但这符合你的预期:

def set_globvar_to_one():
exec(compile("global globvarqnglobvarq = 2", "setglobal", "exec"))

def print_globvar():
eval(compile("print(globvarq)", "setglobal", "eval"))

set_globvar_to_one()
print_globvar()

最新更新