Python:exec()定义的变量未在函数范围内定义

时间:2017-09-21 22:21:52

标签: python scoping

考虑以下代码

g = {}
l = {}

exec("a = 1", g, l)
exec("""
def test():
    print(a)
""", g, l)

l['test']()

这导致

$ python test.py
Traceback (most recent call last):
  File "test.py", line 12, in <module>
    l['test']()
  File "<string>", line 3, in test
NameError: name 'a' is not defined

当我为全局和本地使用单独的词典时,似乎只会发生这种情况。如果我改为使用g = l = {},它会按预期工作。

为什么第一个exec定义的变量在第二个exec定义的函数中不可用?

值得注意的是,变量最终位于l,而不是g

这似乎与How does exec work with locals?相似,但是它并不完全相同,因为我在locals使用真正的字典。

0 个答案:

没有答案