2
respostas

Deixar o "import random" fora do método "def jogar()" não é uma prática ruim? Já que ele só é usado dentro da função?

No Java por exemplo deixamos os imports no cabeçalho (quando não explicito na linha como com.classe.metodo) mas ele é compilado e faz o carregamento da classe apenas ao instanciar. Para o Python que é interpretado, e executa o arquivo só de receber o import, deixar os imports todos no cabeçalho não causa vazamento de memória? Uma vez que se nenhuma rotina fosse de fato executada todos os módulos seriam carregados de qualquer maneira? Por que não posso deixar os imports dentro dos métodos que a utilizam?

2 respostas

Ótima pergunta, fiquei curioso também. De qualquer forma, uma coisa que faço para evitar que muita coisa seja aberta sem ser usada é importar apenas as funcionalidades que vou utilizar, por exemplo :

from random import randint
# Conforme a necessidade, eu vou fazendo novos imports
from random import random

Boa tarde Pedro, tudo bem? Espero que sim!

Obrigado pela pergunta!

De acordo com a PEP-8, que é uma convenção adotada para boas práticas da linguagem Python, as importações devem seguir as seguintes regras:

Imports devem ser sempre colocados no topo do arquivo, logo depois de quaisquer comentários ou docstrings, e antes de constantes ou globais. Eles devem ser agrupados seguindo a ordem:

  • módulos da biblioteca padrão
  • módulos grandes relacionados entre si (por exemplo, todos os módulos de e-mail usados pela aplicação)
  • módulos específicos da aplicação

Você deve colocar uma linha em branco separando cada grupo de módulos.

Pode checar a informação no link abaixo:

https://wiki.python.org.br/GuiaDeEstilo

Porém é uma convenção e nada impede de você importar bibliotecas dentro das funções, sobretudo quando irá utilizar alguma coisa do pacote somente dentro de uma função que irá rodar poucas vezes.

Há por exemplo essa discussão no Stack Overflow, sobre a eficiência de memória:

https://stackoverflow.com/questions/3095071/in-python-what-happens-when-you-import-inside-of-a-function

Estou à disposição, bons estudos!