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

78 投票
2 回答
67874 浏览
提问于 2025-04-17 11:18

我对__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__模块

撰写回答