Ответ 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