Não, não importa .
A compilação para o código de byte CPython é passada apenas por um pequeno otimizador de olho mágico que é projetado para fazer apenas otimizações básicas (consulte test_peepholer.py no conjunto de testes para mais informações sobre essas otimizações).
Para ver o que realmente vai acontecer, use dis
* para ver as instruções geradas. Para a primeira função, contendo a atribuição:
from dis import dis
dis(func)
2 0 LOAD_CONST 1 (42)
2 STORE_FAST 0 (a)
3 4 LOAD_FAST 0 (a)
6 RETURN_VALUE
Enquanto, para a segunda função:
dis(func2)
2 0 LOAD_CONST 1 (42)
2 RETURN_VALUE
Mais duas instruções (rápidas) são usadas na primeira: STORE_FAST
e LOAD_FAST
. Isso faz um armazenamento rápido e captura do valor na fastlocals
matriz do quadro de execução atual. Então, em ambos os casos, a RETURN_VALUE
é executado. Portanto, o segundo é ligeiramente mais rápido devido a menos comandos necessários para executar.
Em geral, esteja ciente de que o compilador CPython é conservador nas otimizações que realiza. Não é e não tenta ser tão inteligente quanto os outros compiladores (que, em geral, também têm muito mais informações para trabalhar). O principal objetivo do design, além de obviamente estar correto, é a) mantê-lo simples eb) ser o mais rápido possível na compilação para que você nem perceba que existe uma fase de compilação.
No final, você não deve se preocupar com pequenos problemas como este. O benefício na velocidade é mínimo, constante e, diminuído pela sobrecarga introduzida pelo fato de que o Python é interpretado.
* dis
é um pequeno módulo Python que desmonta seu código, você pode usá-lo para ver o bytecode Python que a VM executará.
Nota: Como também afirmado em um comentário de @Jorn Vernee, isso é específico para a implementação CPython do Python. Outras implementações podem fazer otimizações mais agressivas se assim o desejarem, o CPython não.
dis.dis(..)
em ambos, verá que há uma diferença , então sim. Mas, na maioria dos aplicativos do mundo real , a sobrecarga disso em comparação com o atraso do processamento na função não é muito.