Bästa svaret
python tolkas. Även om den konverterar den mänskliga läsbara källan till bytecode, som den lagrar i .pyc-filen, och .pyc-filen är bärbar, tolkas .pyc-filen ändå. Till exempel cachar vissa pythontolkar singletonobjekt för vanliga heltal -100 till 100. Vissa gör det inte. Hur spelar det någon roll?
Ett system kan lagligt tolka is-operationen, som jämför Object.id () som True eller som False.
x = 20
x is 20 # Both True and False are valid results.
Demonstration:
$ 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
>>>
Konvertera python-källa till bytecode tar tid, det är rimligen snabbare för python att läsa .pyc-filen än att läsa källan och rekonstruera .pyc.
Det fanns en tid, och jag har inte hängt med importera moduler när python letar efter \_\_init\_\_.py i en katalog för att ladda en modul. Det var klokt att hålla den \_\_init\_\_.py-filen liten för att för det mesta bara få den att importera den användbara koden som skulle ligga i en .pyc-fil.
Och gick pythonoptimering någonstans? Senast jag visste, vilket var för ett tag sedan, var .pyo en .pyc med kommentarer avskalade.
Svar
Jag har svarat detta tidigare här: Quildreen Mottas svar på Kan ett högnivåspråk som Python sammanställas och därmed göra det lika snabbt som C?
Men kort sagt, människor använder inte C eller C ++ eftersom de ”re snabbt , de använder dem eftersom de har en något förutsägbar prestanda . En programmerare kan sedan ta sig tid att handoptimera sina program och det är mycket lättare att resonera om resultatet som härrör från dessa optimeringar.
Det är inte så lätt att göra på ett dynamiskt språk, som Python. Inte desto mindre ger PyPy dig snabbare än- C (gcc, inte helt handoptimerad) prestanda i flera scenarier, du kan bara inte förutsäga när dessa scenarier inträffar eftersom det beror på flera faktorer (vilka data går igenom ditt program, vilka grenar som har tagits, stabiliteten i grenar över t ime, kodens hethet osv.).
Naturligtvis gör PyPy alla optimeringar medan det kör ditt program, så det måste göra en hel del kostnadsviktning och vissa optimeringar blir inte tillämpade på grund av det. Precis som AOT-kompilatorer kan spendera 3 månader på att analysera din kod för att generera RIKTIGT SNABBKOD, kan JIT-optimerare spendera minuter på att analysera din kod. I båda fallen kommer kostnaden sannolikt att löna sig, så de gör det inte.
Att göra AOT-kompilatorer för Python är mycket svårare eftersom Python är ett dynamiskt språk. AOT-kompilatorer, som shedskin – En experimentell (begränsad-Python) -till-C ++ kompilator , använd en begränsad delmängd av Python istället för att kunna analysera den statiskt. Detta tillvägagångssätt liknar en som tagits av RPython, som PyPy bygger på.