Python é uma linguagem interpretada, então o que são arquivos de compilação .pyc?


Melhor resposta

python é interpretado. Embora converta a fonte legível por humanos em bytecode, que armazena no arquivo .pyc, e o arquivo .pyc seja portátil, o arquivo .pyc não é menos interpretado. Por exemplo, alguns interpretadores python armazenam objetos singleton em cache para números inteiros comumente usados ​​-100 a 100. Alguns não. Qual a importância disso?

Um sistema pode interpretar legalmente a operação is, que compara Object.id () como True ou False.

x = 20

x is 20 # Both True and False are valid results.

Demonstração:

$ python3

Python 3.6.3 (default, Oct 3 2017, 21:45:48)

[GCC 7.2.0] on linux

Type "help", "copyright", "credits" or "license" for more information.

>>> x = 30

>>> x is 30

True

>>> x = 23442.2

>>> x is 23442.2

False

>>>

Convertendo o Python source to bytecode leva tempo, razoavelmente é mais rápido para python ler o arquivo .pyc do que ler a fonte e reconstruir o .pyc.

Houve um tempo, e eu não acompanhei importar módulos, quando o python procuraria \_\_init\_\_.py em um diretório para carregar um módulo. Foi sensato manter esse arquivo \_\_init\_\_.py pequeno, para que ele importasse secundariamente o código útil que residiria em um arquivo .pyc.

E a otimização python foi para algum lugar? A última vez que soube, o que foi há um bom tempo, o .pyo era um .pyc com comentários removidos.

Resposta

Já respondi a isso aqui: a resposta de Quildreen Motta para Uma linguagem de alto nível como Python pode ser compilada, tornando-a tão rápida quanto C?

Mas, em resumo, as pessoas não usam C ou C ++ porque “re rápido , eles os usam porque têm um desempenho previsível . Um programador pode então dedicar um tempo para otimizar manualmente seus programas e é muito mais fácil raciocinar sobre o desempenho resultante dessas otimizações.

Isso não é tão fácil de fazer em uma linguagem dinâmica, como o Python. Mesmo assim, o PyPy lhe dará mais rápido que Desempenho C (gcc, não totalmente otimizado à mão) em vários cenários, você simplesmente não pode prever quando esses cenários acontecerão porque isso depende de vários fatores (quais dados estão passando por seu programa, quais ramificações foram tomadas, a estabilidade do ramos sobre t ime, hotness do código, etc).

Claro, PyPy faz todas as otimizações enquanto executa seu programa, então ele precisa fazer muitos pesos de custo e algumas otimizações não são aplicadas por causa disso. Assim como os compiladores AOT podem passar 3 meses analisando seu código para gerar um CÓDIGO REALMENTE RÁPIDO, os otimizadores JIT podem gastar minutos analisando seu código. Em nenhum dos casos, o custo provavelmente será compensado, então eles não fazem isso.

Fazer compiladores AOT para Python é muito mais difícil, porque Python é uma linguagem dinâmica. Compiladores AOT, como shedskin – Um compilador experimental (Python restrito) -para-C ++ , usa um subconjunto restrito de Python para poder analisá-lo estaticamente. Esta abordagem é semelhante ao um tirado por RPython, no qual PyPy é baseado.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *