4 ответов:
прямо из документации python: http://docs.python.org/reference/executionmodel.html
по умолчанию, когда в
__main__модуль__builtins__это встроенный модуль__builtin__(Примечание: нет 's'); когда в любом другом модуль__builtins__- это псевдоним для словаря__builtin__сам модуль.
__builtins__может быть установлен в пользовательский словарь для создания слабая форма ограниченного исполнения.CPython деталь реализации: пользователи не должны касаться
__builtins__; это строго деталь реализации. Пользователи чтобы переопределить значения в пространстве имен builtins, необходимоimportэлемент__builtin__(без 's') модуль и изменить его атрибуты соответственно. Пространство имен для модуля создается автоматически при первом импорте модуля.обратите внимание, что в Python3 модуль
__builtin__переименован вbuiltinsчтобы избежать некоторых из этих путаница.
вы должны использовать
__builtin__в ваших программах (в тех редких случаях, когда вам это нужно), потому что__builtins__- это деталь реализации CPython. Он может быть либо идентичен__builtin__или__builtin__.__dict__в зависимости от контекста. Как документация говорит:большинство модулей имеют имя
__builtins__(обратите внимание на 's'), доступный как часть их глобалов. Значение__builtins__обычно либо этот модуль, либо значение этого модуля__dict__атрибут. Поскольку это деталь реализации, она не может использоваться альтернативными реализациями Python.В Python 3,
__builtin__переименован вbuiltinsи__builtins__остается тем же (так что вы должны использовать толькоbuiltinsв Python 3).Гвидо хотел объединить
__builtin__и__builtins__, Как видим здесь ("имеющего__builtins__и__builtin__оба явно плохая идея."), но, видимо, ничего из этого не вышло.видимо использование
__builtins__для производительности - это дает прямой доступ к__builtin__.__dict__при использовании в неосновном модуле, и поэтому удаляет один уровень косвенности.
__builtin__модуль, содержащий встроенные функции и типы. Дело в том, что имя__builtins__доступно, содержащее то же самое, что и детали реализации. Другими словами, если вам нужно использовать один из них, неimport __builtin__и затем использовать__builtin__. Смотрите документация.
вы можете понять это как следующий код. когда cpython запускается, cpython load
__builtin__модули в глобальное пространство именимпорт
__builtin__Как__builtins__
Comments