Где модуль __builtin__ в Python3? Почему это было переименовано?

Мне было интересно узнать о модуле __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__
>>>

Ответ 1

Модуль __builtin__ был переименован в builtins в Python3.

Это изменение решает два источника путаницы для среднего разработчика Python.

  • Является ли это '__builtins__' или '__builtin__' в глобальном пространстве имен? Дарн!
  • __builtin__ a специальное имя метода или модуль? Я не могу сказать.

Эта путаница в основном возникает из-за нарушения pep8. Кроме того, отсутствие плюрализации на модуле также мешает коммуникации. Оба они в значительной степени иллюстрируются длинами Guido, которые должны объяснять следующее из http://mail.python.org/pipermail/python-ideas/2009-March/003821.html:

[CPython] смотрит на глобалы, содержащие специальную магическую запись __builtins__ (с символом 's'), который является dict, где встроенные функции просматриваются. Когда этот dict является тем же объектом, что и по умолчанию встроенный 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__ используется для разрешения имен - __ встроенный модуль в Python