Python3中的__builtin__模块在哪里?为什么要重命名?

时间:2012-01-28 19:07:02

标签: python

我很好奇__builtin__模块以及它是如何使用的,但我在Python3中找不到它!它为什么动了?

Python 2.7

>>> import __builtin__
>>>

Python 3.2

>>> import __builtin__
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named __builtin__
>>>

2 个答案:

答案 0 :(得分:75)

在Python3中__builtin__模块已重命名为builtins

此更改为普通Python开发人员解决了两个混乱的来源。

  • 是全局命名空间中的'__builtins__'还是'__builtin__'? Darn s!
  • __builtin__special method name还是模块?我不能 告诉。

这种混淆主要是因为违反了pep8惯例。此外,模块上缺乏多元化也妨碍了沟通。 Guido必须从http://mail.python.org/pipermail/python-ideas/2009-March/003821.html解释以下内容的长度极大地说明了这两点:

  

[CPython]查看全局变量,其中包含一个特殊的魔术条目   __builtins__(带有's')是查找内置函数的字典。当此dict与默认相同时   内置字典(__builtin__.__dict__其中__builtin__ -   没有's' - 它是定义内置函数的模块)   你的主管特权; ......

例如,

Python2.7

>>> import __builtin__
>>> vars(globals()['__builtins__']) is vars(__builtin__)
True
>>> 

Python3.2

>>> import builtins
>>> vars(globals()['__builtins__']) is vars(builtins)
True
>>>

相关资源

其他名称更改 - http://docs.pythonsprints.com/python3_porting/py-porting.html#name-changes

有关如何在名称解析中使用__builtins__的简洁说明 - __builtin__ module in Python

答案 1 :(得分:-4)

删除所有pyc文件,然后再次运行 多数民众赞成