Перезагрузка встроенных в Python
Я изучаю концепцию пространства имен в Python и не могу объяснить следующее: перезагрузка builtins
не эффективно перезагрузить модуль. Вот пример:
import importlib as il
import os
import mymodule
mymodule.x = 6
print(mymodule.x)
mymodule = il.reload(mymodule)
print(mymodule.x)
import builtins
builtins.print = lambda x : os.system('echo hello')
builtins.print('hi')
builtins = il.reload(builtins)
builtins.print('hi')
Где mymodule просто содержит назначение x = 5
, Выход:
6
5
hello
hello
Может быть, это глупый вопрос, но в чем причина такого поведения?
1 ответ
Решение
Из документов:
Как правило, не очень полезно перезагружать встроенные или динамически загружаемые модули. перезарядка
sys
,__main__
,builtins
и другие ключевые модули не рекомендуется. Во многих случаях модули расширения не предназначены для инициализации более одного раза и могут произойти сбой произвольным образом при перезагрузке.