4.2.4. 与动态特性的交互
自由变量的名称解析发生于运行时而不是编译时。 这意味着以下代码将打印出 42:
i = 10
def f():
print(i)
i = 42
f()
eval()
和 exec()
函数没有对完整环境的访问权限来解析名称。 名称可以在调用者的局部和全局命名空间中被解析。 自由变量的解析不是在最近包含命名空间中,而是在全局命名空间中。 1 exec()
和 eval()
函数有可选参数用来重载全局和局部命名空间。 如果只指定一个命名空间,则它会同时作用于两者。