在python中对exec的使用需要澄清

时间:2013-09-10 23:48:28

标签: python

我有这个:

>>> 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时我没有看到很多关键的,值对,为什么会这样呢?

1 个答案:

答案 0 :(得分:3)

the docs中解释了这一点:

  

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