Про импорт модулей
Почему в одном проекте пишут import math, а потом используют math.sqrt(), а в другом пишут from math import sqrt и используют просто sqrt()? В чем разница ,какой способ лучше и зачем импортируют модули?
1 ответ
Работают оба варианта одинаково, разница — какие имена появляются в вашем файле.
import math кладёт в программу одно имя — сам модуль. Дальше всё через точку: math.sqrt(x), math.pi. Читая код, сразу видно, откуда взялась функция.
from math import sqrt достаёт из модуля конкретное имя. Писать короче, но есть два минуса: по голому sqrt(x) в большом файле не видно, чей это sqrt, и легко словить конфликт — если у вас уже есть своя функция с таким именем, одна перекроет другую.
Экономии от второй формы нет: модуль в обоих случаях загружается целиком. И только один раз — повторные импорты Python берёт из кэша.
Мой ориентир: маленький скрипт и пара функций — можно from; всё остальное — import math. А вот from math import * не пишите совсем: в файл высыпаются десятки имён, уследить за ними невозможно.
Зачем импорты вообще: стандартная библиотека и сторонние пакеты не загружаются сами — иначе каждая программа таскала бы в памяти тысячи ненужных функций.