Python er tolket språk, så hva er .pyc kompileringsfiler?


Beste svaret

python tolkes. Selv om den konverterer den menneskelige lesbare kilden til bytekode, som den lagrer i .pyc-filen, og .pyc-filen er bærbar, tolkes ikke .pyc-filen. For eksempel lagrer noen pythontolk tolking av enkeltobjekter for ofte brukte heltall -100 til 100. Noen gjør det ikke. Hvordan betyr det?

Et system kan lovlig tolke is-operasjonen, som sammenligner Object.id () som True, eller som False.

x = 20

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

Demonstrasjon:

$ 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

>>>

Konvertering av python-kilde til bytekode tar tid, med rimelighet er det raskere for python å lese .pyc-filen enn å lese kilden og rekonstruere .pyc.

Det var en tid, og jeg har ikke fulgt med importere moduler når python ville se etter \_\_init\_\_.py i en katalog for å laste en modul. Det var lurt å holde den \_\_init\_\_.py-filen liten for å bare ha den sekundært til å importere den nyttige koden som ville ligge i en .pyc-fil.

Og gikk pythonoptimalisering hvor som helst? Sist jeg visste, som var for en god stund siden, var .pyo en .pyc med kommentarer fjernet.

Svar

Jeg har svart på dette før her: Quildreen Mottas svar på Kan et høyt nivå språk som Python kompileres og dermed gjøre det så raskt som C?

Men kort sagt, folk bruker ikke C eller C ++ fordi de «re raskt bruker de dem fordi de har en noe forutsigbar ytelse . En programmerer kan da ta seg tid til å håndoptimalisere programmene sine og det er mye lettere å resonnere om den resulterende ytelsen fra disse optimaliseringene.

Det er ikke så lett å gjøre på et dynamisk språk, som Python. Ikke desto mindre vil PyPy gi deg raskere enn- C (gcc, ikke helt håndoptimalisert) ytelse i flere scenarier, du kan bare ikke forutsi når disse scenariene skjer fordi det avhenger av flere faktorer (hvilke data som går gjennom programmet ditt, hvilke grener som er tatt, stabiliteten til grener over t ime, hotness of the code, etc).

Selvfølgelig gjør PyPy alle optimaliseringene mens den kjører programmet ditt, så det må gjøre mye kostnadsvekting og noen optimaliseringer blir ikke brukt på grunn av det. Akkurat som AOT-kompilatorer kan bruke 3 måneder på å analysere koden din for å generere VIRKELIG RASK KODE, kan JIT-optimaliserere bruke minutter på å analysere koden din. I ingen av tilfellene er det sannsynlig at kostnadene vil lønne seg, så de gjør ikke det.

Å gjøre AOT-kompilatorer for Python er mye vanskeligere, fordi Python er et dynamisk språk. AOT-kompilatorer, for eksempel shedskin – En eksperimentell (begrenset-Python) -til-C ++ kompilator , bruk en begrenset delmengde av Python i stedet for å være i stand til å statisk analysere den. en tatt av RPython, som PyPy er basert på.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *