Копирует ли Python импорт весь код в файл - PullRequest
0 голосов
/ 24 апреля 2019

Когда мы импортируем модуль в сценарий Python, это копирует весь необходимый код в сценарий или просто сообщает сценарию, где его найти?

Что происходит, если мы этого не делаемзатем использовать модуль в коде, оптимизируется ли он как-то, как в C / C ++?

1 Ответ

1 голос
/ 24 апреля 2019

Ничто из этого не относится.

Импорт делает две вещи. Во-первых, если запрошенный модуль ранее не был загружен, импорт загружает модуль. Это в основном сводится к созданию новой глобальной области и выполнению кода модуля в этой области для инициализации модуля. Новая глобальная область используется в качестве атрибутов модуля, а также для поиска глобальной переменной для любого кода в модуле.

Во-вторых, импорт связывает любые запрошенные имена. import whatever привязывает имя whatever к объекту модуля whatever. import whatever.thing также привязывает имя whatever к объекту модуля whatever. from whatever import somefunc ищет атрибут somefunc на объекте модуля whatever и связывает имя somefunc с тем, что найдет поиск атрибута.

Невозможно оптимизировать неиспользуемый импорт, так как загрузка модуля и привязка имени имеют эффекты, на которые может опираться какой-то другой код.

...