Python: в чем разница между builtin и builtins?



Я кодировал сегодня и заметил кое-что. Если я открою новый сеанс интерпретатора (IDLE) и проверю, что определено с помощью

823   4  

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

    Ничего не найдено.