5 мая 2014 г.

Равны ли import и from ?

В предыдущей записи после from потребовалось выполнить инструкцию import, чтобы получить доступ к имени модуля  small,  –  инструкция  from  копирует  только  имена  из одного  модуля в другой и ничего не присваивает самому имени модуля. Инструкция  from,
приведенная ниже:
from module import name1, name2    # Копировать только эти два имени
эквивалентна следующей последовательности, по крайней мере, концептуально:
import module          # Получить объект модуля
name1 = module.name1   # Скопировать имена с помощью присваивания
name2 = module.name2
del module             # Удалить имя модуля

Как и все операции присваивания, инструкция from создает новые переменные в импортирующем модуле, которые ссылаются на объекты с теми же именами в импортируемом файле. При этом копируются только имена, а не сам модуль. При использовании формы from * этой инструкции (from module import *) эквивалентная последовательность действий та же самая, только при этом копируются все имена, определенные на верхнем уровне импортируемого модуля.

Обратите внимание, что на первом шаге инструкция from выполняет обычную операцию import. Вследствие этого инструкция from всегда импортирует весь модуль целиком, если он еще не был импортирован, независимо от того, сколько  имен  копируется  из  файла.  Нет  никакой  возможности  загрузить  только часть модуля (например, только одну функцию), но так как модули – это байт-код, а не машинный код, влияние на производительность оказывается незначительным.

Не забываем ставить лайк и репосты, чем больше лайков тем больше тут будет постов )

1 комментарий: