Python中文
首页
教程
问答
标签
搜索
登录
注册
compile()在python中是如何工作的?
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我有两个代码让我很困惑。在</p> <pre><code>def get_context(): __gc = globals() __lc = locals() def precompiler(code): exec code in __lc def compiler(script, scope): return compile(script, scope, 'eval') def executor(expr): return eval(expr, __gc, __lc) return precompiler, compiler, executor maker1, compiler1, executor1 = get_context() maker2, compiler2, executor2 = get_context() maker1("abc = 123") maker2("abc = 345") expr1 = compiler1("abc == 123", "test.py") print "executor1(abc == 123):", executor1(expr1) print "executor2(abc == 123):", executor2(expr1) </code></pre> <p>结果是:<br/> 执行者1(abc==123):真<br/> executor2(abc==123):错误<br/></p> <p>为什么编译只在闭包中执行一次,而字节码可以在两个闭包中运行?在</p> <p>这里还有另一个代码:</p> ^{pr2}$ <p>结果是:<br/> 名称错误:名称“test_var”未定义<br/></p> <p>这是怎么发生的?在</p> <p>为什么编译需要检查闭包的环境(变量或其他一些),而它不依赖于闭包?这就是我所困惑的!在</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>对于第一个问题,compile只接受python代码并生成字节码。它不依赖于编译它的闭包。如果你拿出一根绳子,那就没什么不同了。该字符串不是永久绑定到创建它的函数上,代码对象也不是。在</p> <p>对于第二个问题,locals()在调用时会生成一个局部变量字典。因为您在调用locals之后设置了test_var,所以它没有它。如果您想在本地函数内部测试_var,则需要在以后调用它。在</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
尽管Python中的所有内容都是引用,为什么Python导师在没有指针的列表中绘制字符串和整数?
10 回答
尽管python中的表达式为false,但循环仍在运行
2 回答
尽管python代码正确,但从nifi ExecuteScript处理器获取语法错误
4 回答
尽管Python在Neovim中工作得很好,但插件不能识别Neovim中的Python主机
9 回答
尽管python字典包含了大量的条目,但它并没有增长
4 回答
尽管python说模块存在,为什么我会得到这个消息?
6 回答
尽管setuptools和控制盘是最新的,但无法识别singleversionexternallymanaged
6 回答
尽管stdout和stderr重定向,但未捕获错误消息
3 回答
尽管Tensorboard的事件太大,但Tensorboard的步骤太少了
4 回答
尽管tkinter上的变量已更改,但显示未更改
1 回答
尽管try/except使用Python进行单元测试时出现断言错误
3 回答
尽管URL是sam,但仍会抛出“达到最大重定向”
10 回答
尽管url有效,Pandas仍读取url的\u csv错误
4 回答
尽管while中存在时间延迟,但LINUX线程的CPU利用率为100%(1)
4 回答
尽管x0在范围内,Scipy优化仍会引发ValueError
2 回答
尽管xpath正确,但使用selenium单击链接仍不起作用
9 回答
尽管下载了ffmpeg并设置了路径变量python,但没有后端错误
7 回答
尽管下载了i,但找不到型号“fr”
7 回答
尽管下载了plotnine包,但未获取名为“plotnine”的模块时出错
3 回答
尽管为所有行指定了权重,网格(0)仍不起作用
5 回答