繁体   English   中英

在Python exec中使用全局变量

[英]Using globals in Python exec

我正在尝试创建一个自定义python解释器类型的应用程序。 我正在使用exec语句(在Python 2.7.6中)来执行给定的代码,但是全局变量并不像预期的那样工作。 有人可以解释为什么这不起作用:

def print_x():
    print(x)


g = {'x': 10, 'print_x': print_x}
l = {}

exec('print_x()', g, l)

结果(print_x函数是g还是l)是一个错误:

NameError: global name 'x' is not defined

那么,传递给exec的全局变量不会转移到被调用的函数吗?

x内部的x从定义函数的命名空间的全局变量中获取。 但是,您在不同的命名空间中调用它。 这与拥有多个模块没有什么不同:

# foo.py
def print_x():
    print(x)

然后尝试在不同的模块中使用它:

# bar.py
from foo import print_x

x = 10
print_x()  # NameError

最终, gexec执行上下文中的全局变量。 在调用print_x函数(在不同的全局上下文中定义)之后,你不能指望print_x知道exec的执行上下文中的全局变量 - print_x只知道它的模块上下文中的全局变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM