Python: importações no início do programa principal e pep 8
Pergunta
o PEP 8 Recomenda que os módulos sejam importados no início dos programas.
Agora, sinto que importar alguns deles no início do a Principal programa (ou seja, depois if __name__ == '__main__'
) faz sentido. Por exemplo, se o programa principal lê argumentos da linha de comando, eu tendem a fazer import sys
no início do a Principal Programa: desta forma, sys
Não precisa ser importado quando o código é usado como módulo, pois não há necessidade, neste caso, para acesso ao argumento da linha de comando.
Quão ruim é essa violação ao PEP 8? Devo abster -se de fazer isso? Ou seria razoável alterar o Pep 8?
Solução
Eu realmente não posso dizer o quão ruim isso deve fazer.
No entanto, eu melhorei bastante o desempenho (tempo de resposta, carga) para um aplicativo da Web, importando certas bibliotecas apenas no primeiro uso.
BTW, o seguinte também é do PEP 8:
Mas o mais importante: saiba quando ser inconsistente - às vezes o guia de estilo simplesmente não se aplica. Em caso de dúvida, use seu melhor julgamento. Veja outros exemplos e decida o que parece melhor. E não hesite em perguntar!
Outras dicas
Em geral, não acho que haja muito mal à importação tardia para módulos que podem não ser necessários.
No entanto sys
Eu definitivamente importaria cedo, no topo. É um módulo tão comum que é muito provável que você possa usar o SYS em outros lugares do seu script e não perceber que nem sempre é importado. sys
também é um dos módulos que sempre é carregado pelo próprio Python, então você não está salvando nenhum tempo de inicialização do módulo, evitando a importação (não que haja muita startup para o SYS de qualquer maneira).
Eu recomendaria que você faça o que você acha que é mais apropriado quando não há nada em relação à sua preocupação.
Importar SYS realmente não demora tanto tempo que eu me preocuparia com isso. Alguns módulos levam mais tempo no entanto. Eu não acho que o SYS realmente entupra muito o espaço para nome. Eu não usaria uma variável ou classe chamada SYS, independentemente.
Se você acha que está causando mais mal do que bom de tê -lo no topo, por todos os meios, faça -o como quiser. O PEP 8 é apenas uma linha de guia e muito código que você vê não está em conformidade com ele.
O problema não é desempenho.
A questão é clareza.
Seu programa "principal" é apenas um programa principal hoje. Amanhã, pode ser uma biblioteca incluída em algum programa principal de nível superior. Mais tarde, será apenas um módulo em um pacote maior.
Como a vida do seu programa "principal" pode mudar, você tem duas respostas.
Isolar as coisas "principais" dentro
if __name__ == "__main__"
. Esta não é uma violação grotesca do PEP-8. Esta é uma maneira razoável de empacotar as coisas.Tente limitar o número de recursos em seus scripts do programa "principal". Tente mantê -los baixos para
import
s e oif __name__ == "__main__"
material. Se seu script principal for pequeno, sua pergunta de importação desaparecerá.