Короткий ответ
Оператор import подключает модуль целиком, и обращения к его объектам идут через имя с точкой, например math.sqrt(16). Оператор from...import переносит выбранные имена прямо в текущее пространство имён, после чего они используются без имени модуля. Синтаксис: from имя_модуля import имя1, имя2.
Как это работает подробнее
Выбор между двумя операторами — вопрос читаемости и контроля пространства имён.
- Импорт целиком.
importделает происхождение имён очевидным, но требует длинных квалифицированных обращений. - Импорт имён.
from...importсокращает код, однако при неудачных именах возможны коллизии. - Импорт звёздочкой.
from module import *заносит все имена разом, загрязняет пространство имён и может переопределить существующие имена. - Псевдонимы. Длинные или конфликтующие имена переименовывают через
as, напримерimport numpy as np. - Особенность импорта. При
import a.bимя b должно быть модулем или пакетом, тогда какfrom a import bпозволяет импортировать и произвольное имя, объявленное в пакете.
Пример кода
Способы импорта
import math # импорт модуля целиком
print(math.sqrt(16)) # 4.0
from math import sqrt, pi # импорт отдельных имён
print(sqrt(16), pi) # 4.0 3.141592653589793
import numpy as np # импорт с псевдонимомЧто использовать на практике
- Читаемость. Используй
import, когда важно показывать происхождение имени. - Компактность. Бери
from...importдля часто используемых имён модуля. - Псевдонимы. Применяй
asдля длинных имён или общепринятых сокращений вродеimport numpy as np.
Подводные камни
- Коллизии имён. Импортированное имя может переопределить существующее или импортированное ранее.
- Импорт звёздочкой. Массовый перенос имён скрывает их происхождение и усложняет чтение и отладку.
- Неверная цель импорта. Через
import a.bнельзя импортировать произвольное имя — только модуль или пакет.
Как отвечать на собеседовании
- Опиши import как импорт модуля целиком, а from...import как перенос нужных имён в текущее пространство имён → приведи синтаксис и пример с math → упомяни псевдонимы через as → предупреди о рисках импорта звёздочкой.