Python импортирует все перечисленные библиотеки? - PullRequest
2 голосов
/ 19 марта 2010

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

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


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

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

Ответы [ 5 ]

3 голосов
/ 19 марта 2010

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

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

2 голосов
/ 19 марта 2010

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

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

1 голос
/ 19 марта 2010

Есть ли смысл беспокоиться о это? * * 1002

нет

Нет

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

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

0 голосов
/ 19 марта 2010

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

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

0 голосов
/ 19 марта 2010

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

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

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

...