Python3中的__builtin__模块在哪里?为什么被重命名?
我对__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 个回答
-8
删除所有的pyc文件,然后再运行一次。就这样。
115
在Python3中,__builtin__
模块被改名为builtins
。
这个改动解决了两个让普通Python开发者感到困惑的问题。
- 全局命名空间中是
'__builtins__'
还是'__builtin__'
?真让人搞不清楚! __builtin__
是一个特殊方法名,还是一个模块?我也搞不明白。
这种困惑主要是因为违反了pep8的命名规范。此外,模块名没有复数形式也让沟通变得困难。这两点在Guido为了解释以下内容时表现得尤为明显,内容来自http://mail.python.org/pipermail/python-ideas/2009-March/003821.html:
[CPython]查看全局变量,其中包含一个特殊的魔法条目
__builtins__
(带's'),这是一个字典,用于查找内置函数。当这个字典和默认的内置字典(即__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__
在名称解析中如何使用的简明解释 - Python中的__builtin__模块