Импортирует ли python все перечисленные библиотеки?

StackOverflow https://stackoverflow.com/questions/2479902

  •  21-09-2019
  •  | 
  •  

Вопрос

Мне просто интересно, у меня часто бывают действительно длинные файлы python, а импорт, как правило, складывается довольно быстро.

PEP8 говорит, что импорт всегда должен записываться в начале файла.


Все ли импортированные библиотеки импортируются при вызове функции, закодированной в файле?Или вызываются только необходимые библиотеки?

Есть ли смысл беспокоиться об этом?Нет ли причин импортировать библиотеки в функции или классы, которые в них нуждаются?

Это было полезно?

Решение

Каждый раз, когда Python обращается к инструкции import, он проверяет, был ли этот модуль уже импортирован, и если нет, импортирует его.Таким образом, импорт в верхней части вашего файла произойдет, как только ваш файл будет запущен или импортирован другим модулем.

Есть некоторые накладные расходы к этому, поэтому, как правило, лучше всего сохранять импорт в верхней части вашего файла, чтобы заранее позаботиться о затратах.

Другие советы

Лучшее место для импорта находится в верхней части вашего файла.Это документирует зависимости в одном месте и приводит к появлению ошибок из-за их отсутствия раньше.Сам импорт фактически происходит во время import утверждение, но это редко имеет большое значение.

Нетипично, что вы что-то выигрываете, не импортируя библиотеку до тех пор, пока не окажетесь в функции или методе, которым это необходимо.(Делая это внутри тела класса, вы никогда ничего не выиграете.) Редко бывает, что вам нужны необязательные зависимости, и еще реже это правильный метод для их получения.Возможно, вы можете поделиться убедительным примером использования?

Имеет ли смысл беспокоиться об этом это?

НЕТ

Нет причин импортировать библиотеки в функции или классы, которые в них нуждаются.Это просто медленно, потому что import оператор должен проверить, был ли он импортирован один раз, и понять, что он был импортирован.

Если вы поместите это в функцию, которая вызывается часто, вы можете потратить некоторое время на все import проверяю.

Импорт происходит, когда модуль, содержащий импорт, выполняется или импортируется, а не при вызове функций.

Обычно я бы не стал беспокоиться об этом.Если вы сталкиваетесь с замедлениями, вы можете создать профиль, чтобы узнать, связана ли ваша проблема с этим.Если это так, вы можете проверить, может ли ваш модуль быть разделен на более мелкие модули.

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

Если функция внутри модуля является единственной, которая импортирует данный другой модуль (скажем, у вас есть функция, отправляющая твиты, только если включена какая-либо опция конфигурации), тогда имеет смысл импортировать этот конкретный модуль в функцию.

Если я не увижу какие-либо данные профилирования, доказывающие обратное, я предполагаю, что накладные расходы на оператор import в функции совершенно незначительны.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top