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?

Foi útil?

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.

  1. 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.

  2. Tente limitar o número de recursos em seus scripts do programa "principal". Tente mantê -los baixos para imports e o if __name__ == "__main__" material. Se seu script principal for pequeno, sua pergunta de importação desaparecerá.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top