考虑以下代码
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
使用真正的字典。