Я только что разместил ниже запрос к comp.lang.python, но я чувствую, что у такого рода вопроса также есть своего рода право прохода здесь, при переполнении стека, так что будьте повторены. суть: почему «встроенные» имеют две разные интерпретации в Python 3?
Я был бы очень рад принять любые комментарии о том, что это
предложение, взятое из http://celabs.com/python-3.1/reference/executionmodel.html,
подразумевается, или почему боги решили, что это путь. я
предвидеть, что этот парень по имени Кей Schluehr будет иметь право голоса, или
может быть, даже BDFL попытается произнести __builtins__
правильный путь к своим спутникам, последователям и собратьям ::
The built-in namespace associated with the execution of
a code block is actually found by looking up the name
__builtins__ in its global namespace; this should be a
dictionary or a module (in the latter case the module’s
dictionary is used). By default, when in the __main__
module, __builtins__ is the built-in module builtins;
when in any other module, __builtins__ is an alias for
the dictionary of the builtins module itself.
__builtins__ can be set to a user-created dictionary to
create a weak form of restricted execution.
Раньше было как минимум два разных термина,
«Встроенный» (в единственном числе) и «встроенный» (во множественном числе), некоторые из
который существовал как в модуле, так и в форме диктовки («просто догадываться»). сейчас
есть только builtins
, поэтому, к счастью, амбивалентность между
единственное и множественное число исчезло - хорошее избавление.
но почему __builtins__
меняет свое значение в зависимости от того,
это область действия «сценария» (т. е. модуля, имя которого было
присутствует, при вызове python foobar.py
) или это
область действия вторичного модуля (импортируется или выполняется, напрямую или
косвенно, по foobar.py
)? я не могу понять аргументацию
за этим и нахожу это очень запутанным.
обоснование: почему меня это волнует? - я хочу иметь возможность экспортировать имена в
глобальное пространство имен, которое не было помечено как частное (подчеркивание
префикс) в модуле Python, который я выполняю через exec( compile( get
( locator ), locator, 'exec' ), R )
, где R
должен идти
хранить личные имена указанного модуля ». это это немного загадочно, но
основное упражнение состоит в том, чтобы обойти систему импорта python и получить similr
результаты ... это все о введении имен в глобальном и
глобальные пространства имен модуля.