Meilleure réponse
python est interprété. Bien quil convertisse la source lisible par lhomme en bytecode, quil stocke dans le fichier .pyc, et que le fichier .pyc soit portable, le fichier .pyc nen est pas moins interprété. Par exemple, certains interpréteurs python mettent en cache des objets singleton pour les entiers couramment utilisés de -100 à 100. Certains non. Quelle est limportance?
Un système peut légalement interpréter lopération is, qui compare Object.id () comme True ou False.
x = 20
x is 20 # Both True and False are valid results.
Démonstration:
$ 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
>>>
Conversion de python source à bytecode prend du temps, raisonnablement il est plus rapide pour python de lire le fichier .pyc que de lire la source et de reconstruire le .pyc.
Il fut un temps, et je nai pas suivi importer des modules, lorsque python chercherait \_\_init\_\_.py dans un répertoire pour charger un module. Il était sage de garder ce fichier \_\_init\_\_.py petit, pour quil importe principalement le code utile qui résiderait dans un fichier .pyc.
Et loptimisation python est-elle allée quelque part? La dernière fois que je savais, cétait il y a pas mal de temps, le .pyo était un .pyc avec des commentaires supprimés.
Réponse
Jai déjà répondu à cette question ici: La réponse de Quildreen Motta à Un langage de haut niveau comme Python peut-il être compilé pour le rendre aussi rapide que C?
Mais en bref, les gens nutilisent pas C ou C ++ parce quils « sont rapide , ils les utilisent car ils ont une performances prévisibles . Un programmeur peut alors prendre le temps d’optimiser manuellement ses programmes et il est beaucoup plus facile de raisonner sur les performances résultant de ces optimisations.
Ce nest pas si facile à faire dans un langage dynamique, comme Python. Néanmoins, PyPy vous donnera plus rapidement que- Performances C (gcc, pas entièrement optimisées manuellement) dans plusieurs scénarios, vous ne pouvez tout simplement pas prédire quand ces scénarios se produisent car cela dépend de plusieurs facteurs (quelles données transitent par votre programme, quelles branches ont été prises, la stabilité du branches sur t ime, hotness du code, etc).
Bien sûr, PyPy fait toutes les optimisations pendant quil exécute votre programme, il doit donc faire beaucoup de pondération des coûts et certaines optimisations ne sont pas appliquées à cause de ça. Tout comme les compilateurs AOT pourraient passer 3 mois à analyser votre code pour générer du CODE VRAIMENT RAPIDE, les optimiseurs JIT pourraient passer des minutes à analyser votre code. Dans les deux cas, le coût est susceptible de payer, donc ils ne le font pas.
Faire des compilateurs AOT pour Python est beaucoup plus difficile, car Python est un langage dynamique. Compilateurs AOT, tels que shedskin – Un compilateur expérimental (Python restreint) vers C ++ , utilisez plutôt un sous-ensemble restreint de Python pour pouvoir lanalyser statiquement. Cette approche est similaire à la celui pris par RPython, sur lequel PyPy est basé.