Python is een geïnterpreteerde taal, dus wat zijn .pyc-compileerbestanden?


Beste antwoord

python wordt geïnterpreteerd. Hoewel het de door mensen leesbare bron omzet in bytecode, die het opslaat in het .pyc-bestand, en het .pyc-bestand draagbaar is, wordt het .pyc-bestand niettemin geïnterpreteerd. Sommige Python-interpreters cachen bijvoorbeeld singleton-objecten voor veelgebruikte gehele getallen -100 tot 100. Sommige niet. Hoe maakt het uit?

Een systeem kan de is-bewerking legaal interpreteren, die Object.id () vergelijkt als True, of als False.

x = 20

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

Demonstratie:

$ 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

>>>

De python source naar bytecode kost tijd, redelijkerwijs is het sneller voor python om het .pyc-bestand te lezen dan om de source te lezen en het .pyc te reconstrueren.

Er was een tijd, en ik heb het niet bijgehouden modules importeren, wanneer python naar \_\_init\_\_.py zou zoeken in een map om een ​​module te laden. Het was verstandig om dat \_\_init\_\_.py-bestand klein te houden, om het meestal in de tweede plaats de nuttige code te laten importeren die in een .pyc-bestand zou staan.

En is python-optimalisatie ergens terechtgekomen? De laatste die ik wist, en dat is al een tijdje geleden, de .pyo was een .pyc met verwijderde opmerkingen.

Antwoord

Ik heb dit eerder hier beantwoord: Quildreen Mottas antwoord op Kan een taal op hoog niveau zoals Python worden gecompileerd, waardoor het net zo snel wordt als C?

Maar kort gezegd, mensen gebruiken geen C of C ++ omdat ze “re snel , gebruiken ze deze omdat ze een enigszins voorspelbare prestatie hebben. Een programmeur kan dan de tijd nemen om zijn programmas met de hand te optimaliseren en het is veel gemakkelijker om te redeneren over de resulterende prestaties van die optimalisaties.

Dat is niet zo gemakkelijk te doen in een dynamische taal, zoals Python. Desalniettemin geeft PyPy je sneller dan C (gcc, niet volledig met de hand geoptimaliseerde) prestaties in verschillende scenarios, je kunt gewoon “niet voorspellen wanneer die scenarios zich voordoen, omdat het afhangt van verschillende factoren (welke gegevens gaan door je programma, welke vertakkingen zijn genomen, de stabiliteit van de takken over t ime, hotness van de code, enz.).

Natuurlijk doet PyPy alle optimalisaties terwijl het je programma draait, dus het moet veel kosten wegen en sommige optimalisaties worden niet toegepast daarom. Net zoals AOT-compilers 3 maanden kunnen besteden aan het analyseren van uw code om ECHT SNELLE CODE te genereren, kunnen JIT-optimizers minuten besteden aan het analyseren van uw code. In geen van beide gevallen zullen de kosten zich terugbetalen, dus doen ze dat niet.

AOT-compilers voor Python doen is veel moeilijker, omdat Python een dynamische taal is. AOT-compilers, zoals shedskin – Een experimentele (beperkte-Python) -to-C ++ compiler , gebruik in plaats daarvan een beperkte subset van Python om deze statisch te kunnen analyseren. Deze benadering is vergelijkbaar met de een gemaakt door RPython, waarop PyPy is gebaseerd.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *