Загрузка модуля
239
Чтобы перезагрузить модуль в версии v3, передайте объект модуля (а не его имя)
в качестве единственного аргумента функции reload из модуля importlib (в вер-
сии v2 вызовите вместо этого встроенную функцию reload,
которая дает тот же ре-
зультат). Вызов importlib.reload(
M) обеспечивает гарантированное использование
перезагруженной версии
M клиентским кодом, полагающимся на инструкцию import
M
и получающим доступ к атрибутам с
помощью синтаксиса M.A. Однако вызов
importlib.reload(
M) не оказывает влияния на другие существующие ссылки, свя-
занные с предыдущими значениями атрибутов
M (например, с помощью инструкции
from). Другими словами, вызов функции reload не влияет на ранее связанные пере-
менные, связывание которых остается прежним. Неспособность функции reload по-
вторно связывать такие переменные служит дополнительным поводом к использова-
нию инструкции import вместо инструкции from.
Функция reload не является рекурсивной: перезагрузка модуля
M не означает,
что при этом перезагружаются
также другие модули, импортируемые модулем
M. Вы
должны перезагружать каждый модуль по отдельности путем явных вызовов функ-
ции reload.
Циклический импорт
Python позволяет определять циклические операции импорта.
Например, у вас
может
быть модуль a.py, содержащий инструкцию import
b, в то
время как модуль
b.py содержит инструкцию import
a.
Если вы все же используете циклический
импорт по каким-либо причинам, то
должны хорошо понимать,
как он работает, чтобы избежать ошибок в своем коде.
Do'stlaringiz bilan baham: