我试图在
project中使用Python的执行程序来执行嵌入式Python代码.
我遇到的问题是,在exec语句中的模块级别创建的变量不能从同一模块中定义的函数访问.
假设你有以下Python程序:
x = 5 def foo(): print x foo()
但是,如果您尝试从exec语句中运行相同的代码,它将无法正常工作.
这是我们以前的程序,在一个exec语句里面:
import __builtin__ global_env = {'__builtins__': __builtin__} local_env = dict() exec """ x = 5 def foo(): print x foo() """ in global_env,local_env
执行时,而不是工作,它会产生以下错误:
Traceback (most recent call last): File "lab.py",line 94,in <module> """ in global_env,local_env File "<string>",line 5,in <module> File "<string>",line 4,in foo NameError: global name 'x' is not defined
我认为模块级变量存储在全局范围内,但似乎至少在exec中,它们不是.
print global_env print local_env
你得到:
{'__builtins__': <module '__builtin__' (built-in)>} {'x': 5,'foo': <function foo at 0x102c12938>}
所以在模块级(包括x)中定义的任何东西都存储在本地()中.
但是除了exec语句的模块级以外,从任何地方访问x是不可能的.特别是,如上所述,x的本地范围对同一个exec语句中定义的函数是不可见的.
exec """ x = 5 def foo(): global x print x foo() """ in global_env,local_env
第二个在exec中使用与全局变量()和locals()相同的字典:
exec """ x = 5 def foo(): print x foo() """ in global_env
所以我的问题是:为什么exec中的模块级变量存储在本地,为什么从模块级到任何地方都不可访问?
一些密切相关的StackOverflow帖子:
> globals and locals in python exec()
> Cannot change global variables in a function through an exec() statement?
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。