2014-11-07 2 views
5

Я прочитал here о сортировке ваших операторов import на Python, но что, если вещь, которую вы импортируете, нуждается в зависимостях, которые еще не были импортированы? Разве это разница между скомпилированными языками и интерпретируется? Я исхожу из фона JavaScript и порядок загрузки ваших скриптов, в то время как Python, похоже, не заботится. Благодарю.Является ли Python import order matter

+0

Значит, это верно для импорта методов? Например: 'from x import xx' – Dusty

ответ

5

Нет, это не так, потому что каждый модуль python должен быть автономным и импортировать все, что ему нужно. Это справедливо для импорта целых модулей и только определенных его частей.

13

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

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

+0

+1 для мелкой печати. –

+1

Если вы используете (не рекомендуется) 'из пакета import *' парадигма, можно также переписать определения. Это, например, происходит с 'from math import *' и 'from numpy import *'. –

+1

Порядок импорта может иметь значение, если поведение '__init__' модуля имеет побочные эффекты. Например, при импорте TensorFlow будет использоваться общая память GPU. Если вы попытаетесь импортировать Caffe после импорта TensorFlow, Caffe не сможет требовать какие-либо ресурсы памяти от GPU (ов). Могут быть более простые вещи с модулями расширения, которые определяют конфликтующие настройки или помещают блокировки в файлы. «Импорт» означает «выполнить некоторый код». Это настолько повсеместно распространено среди широко используемых библиотек, что не полезно сказать, что порядок импорта не имеет значения, потому что побочные эффекты, связанные с импортом, являются плохой практикой. – ely

1

Порядок импорта Python не имеет значения при импорте стандартных библиотек python/модули. Но заказ имеет значение для вашего локального импорта приложений/библиотек, поскольку вы можете зацикливаться на циклическом цикле зависимостей, поэтому перед импортом посмотрите.

Смежные вопросы