Python je interpretovaný jazyk, tak jaké jsou kompilační soubory .pyc?


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.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *