为什么在some_dict中执行'some code'会产生一个庞大的字典?

时间:2014-04-07 12:41:30

标签: python exec

我今天在python cook book上看到了一段代码。

d={}
exec defining_code in d

我在终端上试了一下,它返回的结果震惊了我:

d={1:2} 
exec 'print 1' in d
print d
{'__builtins__': {'bytearray': <type 'bytearray'>, 
# Here I omitted hundreds of key-value pairs},
1:2}

这有点像'导入这个'吗?如果是,为什么设计师以这种形式制作它?如果这不是一招,它下面的机制是什么?

1 个答案:

答案 0 :(得分:1)

来自exec声明中的Python docs

  

作为副作用,除了与执行代码设置的变量名对应的字典之外,实现可以将附加键插入到给出的字典中。例如,当前实现可能会在 builtins (!)键下添加对内置模块 builtin 的字典的引用。