глубина импорта python - PullRequest
2 голосов
/ 29 июня 2010

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

редактировать

извините, я думаю, что до сих пор меня неправильно поняли ответы на вопросы о множественном импорте некоторых зависимостей. Я думаю о вложенных папках, например в django, если вы импортируете django, вы можете получить доступ к django.contrib.auth, но вы не сможете получить доступ к django.contrib.auth.views, если не импортируете это специально. Мне просто интересно, всегда ли это на два уровня ниже в таком случае

второе редактирование

чтобы пояснить еще раз .. в примере с django макет имеет вид /django/contrib/auth/views.py, где у каждой из подпапок есть " init .py", делающий его модулем, ни один из которых не определяет атрибуты " all ". Является ли мой пример плохим, поскольку, возможно, вы не можете использовать точечный синтаксис для перехода к файлу в папке, обозначенной модулем?

Ответы [ 3 ]

3 голосов
/ 29 июня 2010

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

1 голос
/ 29 июня 2010

Нет предопределенного уровня глубины импорта.Операторы импорта выполняются, как и любые другие операторы python.

Но вы можете задаться вопросом, как избежать циклов?Модули добавляются в sys.modules (т.е. кешируются), когда они импортируются впервые, и это первое местоположение, которое проверяется при выполнении оператора импорта.Таким образом, каждый модуль загружается только один раз, хотя он может появляться во многих операторах импорта.

1 голос
/ 29 июня 2010

Не совсем.Модуль импортирует вещи из других модулей, потому что ему нужно использовать их в этом модуле, иначе он сломается.

...