【发布时间】:2021-07-23 04:24:00
【问题描述】:
每当我使用以下 sn-p 执行我的代码时,它都可以正常工作。
def set_globvar_to_one():
global globvarq
globvarq = 2
def print_globvar():
print(globvarq)
set_globvar_to_one()
print_globvar()
但是,就我而言,我需要使用 exec 命令执行这个 sn-p,因为我的代码是动态的。 所以,我尝试了以下。
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
如何使一个方法中的变量成为全局变量,并在另一种方法中使用相同的变量?
【问题讨论】:
-
我不确定为什么会失败,但我可以指出编译和执行
global语句本身是完全没用的——它对单独编译的语句没有任何影响.
标签: python methods exec eval global