Руководство по стилю Python предлагает группировать импорт следующим образом:
Импорт должен быть сгруппирован в следующем порядке:
- импорт стандартной библиотеки
- связанный сторонний импорт
- локальный импорт приложений / библиотек
Однако в нем ничего не говорится о том, как должны быть изложены два различных способа импорта:
from foo import bar
import foo
Существует несколько способов их сортировки (предположим, что все эти импортные файлы принадлежат одной и той же группе):
сначала
from..import
, потомimport
from g import gg from x import xx import abc import def import x
сначала
import
, потомfrom..import
import abc import def import x from g import gg from x import xx
алфавитный порядок по имени модуля, игнорируя вид импорта
import abc import def from g import gg import x from xx import xx
В PEP8 не упоминается предпочтительный порядок для этого, а функции «очистки импорта» некоторые IDE, вероятно, просто делают так, как предпочитает разработчик этой функции.
Я ищу другого PEP, поясняющего этот или соответствующий комментарий / электронное письмо от BDFL (или другого разработчика ядра Python). Пожалуйста, не публикуйте субъективные ответы с указанием собственных предпочтений.
источник
Ctrl+F
это постоянное время, независимо от того, как вы организовываете импорт ...)Ответы:
Импорт обычно сортируется в алфавитном порядке и описывается в разных местах, кроме PEP 8.
Сортированные по алфавиту модули быстрее читаются и доступны для поиска . В конце концов Python все о читаемости. Также легче проверить, что что-то импортировано, и избежать дублирования импорта
В PEP 8 нет ничего доступного для сортировки. Так что все дело в выборе того, что вы используете.
В соответствии с несколькими ссылками с авторитетных сайтов и репозиториев также популярность, алфавитный порядок является способом.
например, вот так:
ИЛИ
Официальный репозиторий Reddit также заявляет, что, как правило, следует использовать порядок импорта PEP-8. Однако есть несколько дополнений, которые
Ссылки:
PS: утилита isort автоматически сортирует ваш импорт.
источник
import x
иfrom y import z
утверждениях относительно друг друга. Я не вижу ответа на этот вопрос в вашем ответе. Вы в основном перебираете часть вопроса, которая уже объясняет способ группировки PEP8 по типу импорта. Если ответ на этот конкретный вопрос есть в некоторых ссылках, пожалуйста, укажите соответствующие части.import datetime
за нимimport os
гораздо труднее читать, чемimport os
за нимimport datetime
. И разница в их поиске с учетом лексической сортировки и не лексической сортировки настолько тривиальна, что совершенно не имеет значения, даже незначительным образом.import _tkinter
противimport unittest
)Согласно внутренним соглашениям CIA о кодировании (часть утечки из WikiLeaks Vault 7 ), импорт python должен быть сгруппирован в три группы:
Импорт должен быть упорядочен лексикографически в этих группах, игнорируя регистр:
источник
from x import y
следует, следует ли до или послеfrom y import x
- имя модуля или фактический импорт, определяющий порядок?ПКП 8 ничего не говорит об этом на самом деле. Здесь нет соглашения по этому вопросу, и это не означает, что сообщество Python должно определять его абсолютно. Выбор может быть лучше для проекта, но худший для другого ... Это вопрос предпочтений, поскольку у каждого решения есть свои плюсы и минусы. Но если вы хотите следовать соглашениям, вы должны уважать основной порядок, который вы цитировали:
Например, Google рекомендует на этой странице , что импорт должен быть отсортирован лексически , в каждой из категорий (стандарт / третьих лиц / Yours). Но в Facebook, Yahoo и так далее, возможно, это другое соглашение ...
источник
Я настоятельно рекомендую reorder-python-import . Он следует за вторым вариантом принятого ответа, а также интегрируется в предварительную фиксацию , что очень полезно.
источник
Все
import x
операторы должны быть отсортированы по значению,x
а всеfrom x import y
операторы должны быть отсортированы по значениюx
в алфавитном порядке, а отсортированные группыfrom x import y
операторов должны следовать отсортированной группеimport x
операторов.источник
Я чувствую, что принятый ответ слишком многословен. Вот TLDR:
Руководство по стилю кода Google
Итак, третий вариант верен:
источник