Nejlepší odpověď
Python je interpretován. Ačkoli převádí zdroj čitelný člověkem na bytecode, který ukládá v souboru .pyc, a soubor .pyc je přenosný, soubor .pyc je přesto interpretován. Například někteří tlumočníci pythonu ukládají do mezipaměti jednotlivé objekty pro běžně používaná celá čísla -100 až 100. Někteří ne. Jak na tom záleží?
Systém může legálně interpretovat operaci is, která porovnává Object.id () jako True nebo False.
x = 20
x is 20 # Both True and False are valid results.
Demonstrace:
$ 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
>>>
Převod zdroj pythonu na bytecode nějakou dobu trvá, rozumně je tedy pythonu rychlejší číst soubor .pyc, než číst zdroj a rekonstruovat .pyc.
Byl čas a já jsem s ním nedržel krok import modulů, když by python hledal \_\_init\_\_.py v adresáři pro načtení modulu. Bylo moudré ponechat tento soubor \_\_init\_\_.py malý, většinou jej pouze sekundárně importovat užitečný kód, který by byl umístěn v souboru .pyc.
A šla optimalizace pythonu někam? Nakonec jsem věděl, že to bylo před nějakou dobou, .pyo byl .pyc s odstraněnými komentáři.
Odpověď
Odpověděl jsem na to již dříve: Odpověď Quildreen Motta na Lze sestavit jazyk na vysoké úrovni, jako je Python, který je tak rychlý jako C?
Ale ve zkratce, lidé nepoužívají C nebo C ++, protože „re rychle , používají je, protože mají poněkud předvídatelný výkon . Programátor si pak může najít čas a ručně optimalizovat své programy a je mnohem snazší uvažovat o výsledném výkonu z těchto optimalizací.
To není tak snadné v dynamickém jazyce, jako je Python. Přesto vám PyPy poskytne rychlejší než – C (gcc, ne zcela ručně optimalizovaný) výkon v několika scénářích, prostě nemůžete předvídat, kdy k těmto scénářům dojde, protože to závisí na několika faktorech (která data procházejí vaším programem, které větve byly použity, stabilita větve nad t ime, rozpálenost kódu atd.).
Samozřejmě PyPy provádí všechny optimalizace, když spouští váš program, takže musí dělat hodně vážení nákladů a některé optimalizace se neaplikují z důvodu, že. Stejně jako kompilátoři AOT mohou strávit 3 měsíce analýzou vašeho kódu, aby vygenerovali SKUTEČNĚ RYCHLÝ KÓD, mohli by optimalizátoři JIT strávit minuty analýzou vašeho kódu. V obou případech se náklady pravděpodobně nezaplatí, takže to nedělají.
Dělat překladače AOT pro Python je mnohem obtížnější, protože Python je dynamický jazyk. Překladače AOT, například shedskin – experimentální kompilátor (s omezeným Pythonem) do C ++ , použijte statickou analýzu omezené podmnožiny Pythonu. Tento přístup je podobný jeden pořízený RPythonem, na kterém je založen PyPy.