1

我有这个:

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

4

1 回答 1

3

这在文档中进行了解释:

作为副作用,一个实现可能会在给定的字典中插入额外的键,除了那些对应于由执行代码设置的变量名的字典。__builtin__例如,当前实现可能会在键__builtins__(!)下添加对内置模块字典的引用。

于 2013-09-10T23:59:42.827 回答