Чем import module отличается от from module import name?
Есть import math и from math import sqrt. В чём практическая разница и что лучше использовать?
3 ответа
Разница в том, как ты потом обращаешься к именам:
import math
math.sqrt(9) # нужно писать через префикс math.
from math import sqrt
sqrt(9) # имя доступно напрямую
import math тащит весь модуль и ты зовёшь функции через math.. from math import sqrt кладёт в твоё пространство имён только sqrt. Второй вариант короче, но есть риск конфликта имён: если у тебя своя переменная sqrt, она перетрёт импортированную. Поэтому для часто используемых вещей from ... import ок, а в больших проектах import module (или import numpy as np) считается безопаснее и читаемее — сразу видно, откуда функция.
import math → пишешь math.sqrt. from math import sqrt → пишешь просто sqrt. Функционально один и тот же модуль грузится.
И никогда не делай from module import * в нормальном коде — засоряешь пространство имён и непонятно, что откуда взялось.