我有这个:
>>> d = {}
>>> d["hi"] = 12345
>>> d1 = {}
>>> d1["hiiii"] = 1234590
我知道为什么我会在下面收到错误。这是因为exec无法找到变量hi和hiiii。
>>> exec "print hi, hiiii"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1, in <module>
NameError: name 'hi' is not defined
>>> exec "print hiiii"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1, in <module>
NameError: name 'hiiii' is not defined
现在它有效,因为exec能够在字典d和d1中找到hi和hiiii变量
>>> exec "print hi, hiiii" in d , d1
12345 1234590
到目前为止一切顺利。
问题:
现在当我打印d时,我发现它已被修改并打印了许多关键值,值对。为什么? 但是在打印d1时我没有看到很多关键的,值对,为什么会这样呢?
答案 0 :(得分:3)
the docs中解释了这一点:
作为副作用,除了与执行代码设置的变量名对应的字典之外,实现可以将附加键插入到给出的字典中。例如,当前实现可以在键
__builtin__
(!)下添加对内置模块__builtins__
的字典的引用。