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

Der*_*itz 60 python

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

Python 2.7

>>> import __builtin__
>>>
Run Code Online (Sandbox Code Playgroud)

Python 3.2

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

Der*_*itz 83

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

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

  • '__builtins__''__builtin__'那是在全局命名空间中?Darn s!
  • __builtin__一个特殊的方法名称或模块?我说不出来.

这种混乱主要是因为违反了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
>>> 
Run Code Online (Sandbox Code Playgroud)

Python3.2

>>> import builtins
>>> vars(globals()['__builtins__']) is vars(builtins)
True
>>>
Run Code Online (Sandbox Code Playgroud)

相关资源:

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

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