O guia de estilo python sugere agrupar importações como esta:
As importações devem ser agrupadas na seguinte ordem:
- importações de biblioteca padrão
- importações de terceiros relacionadas
- importações locais específicas de aplicativos / bibliotecas
No entanto, não menciona nada como devem ser apresentadas as duas formas diferentes de importação:
from foo import bar
import foo
Existem várias maneiras de classificá-las (vamos supor que todas essas importações pertencem ao mesmo grupo):
primeiro
from..import
entãoimport
from g import gg from x import xx import abc import def import x
primeiro
import
entãofrom..import
import abc import def import x from g import gg from x import xx
ordem alfabética pelo nome do módulo, ignorando o tipo de importação
import abc import def from g import gg import x from xx import xx
O PEP8 não menciona a ordem preferida para isso e os recursos "importações de limpeza" que alguns IDEs provavelmente fazem apenas o que o desenvolvedor desse recurso preferir.
Estou procurando outro PEP que esclareça este ou um comentário / email relevante do BDFL (ou outro desenvolvedor principal do Python). Por favor, não poste respostas subjetivas afirmando sua própria preferência.
fonte
Ctrl+F
é tempo constante, não importa como você organiza as importações ...)Respostas:
As importações são geralmente classificadas em ordem alfabética e descritas em vários lugares ao lado do PEP 8.
Os módulos ordenados alfabeticamente são mais rápidos de ler e pesquisáveis . Afinal python é tudo sobre legibilidade. Também é mais fácil verificar se algo é importado e evita importações duplicadas
Não há nada disponível no PEP 8 em relação à classificação. Portanto, tudo depende da escolha do que você usa.
De acordo com poucas referências de sites e repositórios respeitáveis e também popularidade, a ordem alfabética é o caminho.
por exemplo:
OU
O repositório oficial do Reddit também afirma que, em geral, o pedido de importação do PEP-8 deve ser usado. No entanto, existem algumas adições que são
Referências:
PS: o utilitário isort classifica automaticamente suas importações.
fonte
import x
efrom y import z
declarações relativas uma à outra. Não vejo resposta para esta pergunta na sua resposta. Você está basicamente reafirmando parte da pergunta que já explica a maneira de agrupar o PEP8 por tipo de importação. Se uma resposta a esta pergunta específica estiver em alguns dos links, cite as partes relevantes.import datetime
seguido porimport os
muito mais difícil de ler do queimport os
seguido porimport datetime
. E a diferença de procurá-los, dada a classificação lexical versus a não lexicamente classificada, é tão trivial que não importa completamente, mesmo que de maneira leve.import _tkinter
vsimport unittest
)De acordo com as convenções de codificação internas da CIA (parte do vazamento do WikiLeaks Vault 7 ), as importações de python devem ser agrupadas em três grupos:
As importações devem ser encomendadas lexicograficamente dentro desses grupos, ignorando o caso:
fonte
from x import y
deve ser antes ou depoisfrom y import x
- é o nome do módulo ou a importação real que determina a ordem?O PEP 8 não diz nada sobre isso de fato. Não há convenção para esse ponto, e isso não significa que a comunidade Python precise defini-la absolutamente. Uma escolha pode ser melhor para um projeto, mas a pior para outro ... É uma questão de preferências para isso, pois cada solução tem prós e contras. Mas se você deseja seguir as convenções, deve respeitar a ordem principal que citou:
Por exemplo, o Google recomenda nesta página que a importação seja classificada lexicograficamente , em cada categoria (padrão / terceiros / sua). Mas no Facebook, Yahoo e o que for, talvez seja outra convenção ...
fonte
Eu recomendo reordenar-python-importações . Segue a 2ª opção da resposta aceita e também se integra ao pré-commit , o que é super útil.
fonte
Todas as
import x
instruções devem ser classificadas pelo valor dex
e todas asfrom x import y
instruções devem ser classificadas pelo valor dex
em ordem alfabética e os grupos defrom x import y
instruções classificados devem seguir o grupo deimport x
instruções classificado .fonte
Eu sinto que a resposta aceita é um pouco detalhada demais. Aqui está o TLDR:
Guia de estilo de código do Google
Portanto, a terceira opção está correta:
fonte