Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Dúvida sobre boas práticas - Iniciante em python

Olá a todos.

Estou programando uma função que gera um array de valores. Para gerar esses valores preciso de um método da library numpy.

Por enquanto, meu código está assim:

import numpy as np

def erros_padronizados(valores_y, valores_y_ajustados):
    # Função de normalização dos erros

    #Cálculo dos erros
    erros = valores_y - valores_y_ajustados

    #Gerando o resultado
    return((erros-np.mean(erros))/np.std(erros))

Pretendo colocar esse código no meu git para que outras pessoas possam usar. Minha dúvida é:

Eu preciso colocar o 'import numpy as np' dentro da função, ou não? O que é melhor em termos de boas práticas?

1 resposta
solução!

Olá, Fábio. Cara, a resposta para sua pergunta é: depende.

A PEP-8, a guia "pythonica" de estilo de código, recomenda fazer as importações sempre no cabeçalho do código, como uma boa prática. Mas isso é somente uma recomendação de estilo, não precisa ser seguida à risca porque pode trazer variações de desempenho em seu código, mínimas, microssegundos ou segundos, mas pode.

Se seu módulo for um módulo muito pesado, carregar o módulo no cabeçalho aumentará um pouco o tempo de desempenho do início do programa (os microssegundos ou segundos que falei acima).

Realizar a importação dentro das funções fará com que, obviamente, a importação só aconteça quando o método for chamado, o que traria essa micro lentidão somente no momento de chamada do método.

Você pode ficar em dúvida se fazendo a importação dentro da função o módulo numpy ficará sendo importado a cada chamada nova da função, e isso não acontece. A importação só acontece uma vez e depois da chamada, o módulo é mantido num registro interno do Python, agilizando o desempenho de seu código.

Então, a sua resposta é essa. Como boa prática, seguindo a PEP-8, importações devem ocorrer no cabeçalho. Mas se você quiser ganhar desempenho no início do programa, pode importar o módulo dentro das funções e essa pequena diminuição de desempenho, caso seja uma lib muito grande, só ocorrerá na primeira chamada da função. Entretanto, se seu código é muito dependente da lib importada, se você precisa de muitos métodos da lib, acredito que o ideal seria importar já no cabeçalho.

Por fim, em casos de libs menores nem deve fazer diferença importar dentro ou fora de funções, então nesse caso eu seguiria a PEP-8.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software