Место выписки об импорте - PullRequest
5 голосов
/ 12 марта 2012

Я неоднократно замечал, что оператор import mod может быть помещен строго перед вызовом mod.something () .Хотя я заметил, что обычно разработчики помещают оператор импорта в начало исходного файла.Есть ли для этого веская причина?

Я часто использую только несколько функций из какого-то конкретного модуля.Мне кажется более привлекательным помещать оператор импорта перед вызовом функции.

Например,

# middle of the source file
import mod
mod.something()

Что бы вы порекомендовали и почему?

Ответы [ 2 ]

6 голосов
/ 12 марта 2012

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

5 голосов
/ 12 марта 2012

Можно также переместить мой комментарий сюда как ответ, хотя он кажется немного излишним.

Руководство по стилю PEP требует, чтобы весь импорт выполнялся в начале модуля. Это позволяет людям узнать, какие зависимости у вашего модуля, а не копаться во всем исходном документе.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...