Migliore risposta
python viene interpretato. Sebbene converta la sorgente leggibile dalluomo in bytecode, che memorizza nel file .pyc, e il file .pyc è portabile, il file .pyc è nondimeno interpretato. Ad esempio, alcuni interpreti Python memorizzano nella cache oggetti singleton per interi comunemente usati da -100 a 100. Alcuni no. Che importanza ha?
Un sistema può interpretare legalmente loperazione is, che confronta Object.id () come True o False.
x = 20
x is 20 # Both True and False are valid results.
Dimostrazione:
$ 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
>>>
Conversione del Il codice sorgente di python in bytecode richiede tempo, ragionevolmente è più veloce per python leggere il file .pyc che leggere il sorgente e ricostruire il .pyc.
Cera un tempo e non ho tenuto il passo con importando i moduli, quando python cerca \_\_init\_\_.py in una directory per caricare un modulo. Era saggio mantenere piccolo quel file \_\_init\_\_.py, per lo più semplicemente importarlo secondariamente il codice utile che risiederebbe in un file .pyc.
E lottimizzazione di Python è andata da qualche parte? Lultima volta che ho saputo, che è stato un bel po di tempo fa, il .pyo era un .pyc con commenti rimossi.
Risposta
Ho già risposto a questa prima qui: Quildreen Motta ” Un linguaggio di alto livello come Python può essere compilato rendendolo così veloce come C?
Ma in breve, le persone non usano C o C ++ perché “re veloce , li usano perché hanno una prestazione prevedibile . Un programmatore può quindi prendersi il tempo per ottimizzare manualmente i propri programmi e è molto più facile ragionare sulle prestazioni risultanti da quelle ottimizzazioni.
Non è così facile da fare in un linguaggio dinamico, come Python. Nondimeno, PyPy ti darà più veloce di Prestazioni C (gcc, non interamente ottimizzate manualmente) in diversi scenari, non è possibile prevedere quando si verificano tali scenari perché dipende da diversi fattori (quali dati stanno attraversando il programma, quali rami sono stati presi, la stabilità del rami oltre t ime, piccantezza del codice, ecc.).
Ovviamente, PyPy esegue tutte le ottimizzazioni mentre esegue il programma, quindi deve fare molta ponderazione dei costi e alcune ottimizzazioni non vengono applicate per questo motivo. Proprio come i compilatori AOT potrebbero passare 3 mesi ad analizzare il tuo codice per generare un CODICE DAVVERO VELOCE, gli ottimizzatori JIT potrebbero impiegare minuti ad analizzare il tuo codice. In nessun caso è probabile che il costo ripaghi, quindi non lo fanno.
Fare compilatori AOT per Python è molto più difficile, perché Python è un linguaggio dinamico. Compilatori AOT, come shedskin – Un compilatore sperimentale (con restrizioni da Python) a C ++ , utilizza invece un sottoinsieme limitato di Python per poterlo analizzare staticamente. Questo approccio è simile al uno preso da RPython, su cui si basa PyPy.