gpt4 book ai didi

python - 在 Python exec 中使用全局变量

转载 作者:太空宇宙 更新时间:2023-11-03 10:58:08 24 4
gpt4 key购买 nike

我正在尝试创建自定义 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 是从定义函数的命名空间的全局变量中获取的。但是,您在不同的命名空间中调用它。这与拥有多个模块没有太大区别:

# 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 只知道它模块上下文中的全局变量。

关于python - 在 Python exec 中使用全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37893257/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com