我有两个代码让我很困惑。在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)
结果是:
执行者1(abc==123):真
executor2(abc==123):错误
为什么编译只在闭包中执行一次,而字节码可以在两个闭包中运行?在
这里还有另一个代码:
^{pr2}$
结果是:
名称错误:名称“test_var”未定义
这是怎么发生的?在
为什么编译需要检查闭包的环境(变量或其他一些),而它不依赖于闭包?这就是我所困惑的!在