Beste Antwort
Python wird interpretiert. Obwohl die vom Menschen lesbare Quelle in Bytecode konvertiert wird, den sie in der .pyc-Datei speichert, und die .pyc-Datei portierbar ist, wird die .pyc-Datei dennoch interpretiert. Beispielsweise zwischenspeichern einige Python-Interpreter Singleton-Objekte für häufig verwendete Ganzzahlen -100 bis 100. Einige tun dies nicht. Wie spielt es eine Rolle?
Ein System kann die is-Operation, die Object.id () vergleicht, legal als True oder als False interpretieren.
x = 20
x is 20 # Both True and False are valid results.
Demonstration:
$ 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
>>>
Konvertieren der Python-Quelle zu Bytecode braucht Zeit, vernünftigerweise ist es für Python schneller, die .pyc-Datei zu lesen, als die Quelle zu lesen und den .pyc zu rekonstruieren.
Es gab eine Zeit, mit der ich nicht Schritt gehalten habe Importieren von Modulen, wenn Python in einem Verzeichnis nach \_\_init\_\_.py sucht, um ein Modul zu laden. Es war ratsam, diese \_\_init\_\_.py-Datei klein zu halten, damit sie meistens nur den nützlichen Code importiert, der sich in einer .pyc-Datei befinden würde.
Und ging die Python-Optimierung irgendwohin? Zuletzt wusste ich, dass der .pyo vor einiger Zeit ein .pyy war, dessen Kommentare entfernt wurden.
Antwort
Ich habe dies hier zuvor beantwortet: Quildreen Mottas Antwort auf Kann eine Hochsprache wie Python kompiliert werden, wodurch sie so schnell wie C ist?
Kurz gesagt, die Benutzer verwenden C oder C ++ nicht, weil sie schnell , sie verwenden sie, weil sie eine etwas vorhersehbare Leistung haben. Ein Programmierer kann sich dann die Zeit nehmen, seine Programme von Hand zu optimieren und Es ist viel einfacher, über die resultierende Leistung dieser Optimierungen nachzudenken.
In einer dynamischen Sprache wie Python ist dies nicht so einfach. Trotzdem bietet Ihnen PyPy schneller als … C (gcc, nicht vollständig handoptimiert) Leistung in mehreren Szenarien, Sie können einfach nicht vorhersagen, wann diese Szenarien auftreten, da dies von mehreren Faktoren abhängt (welche Daten durch Ihr Programm gehen, welche Zweige genommen wurden, die Stabilität der Zweige über t IME, Aktualität des Codes usw.)
Natürlich führt PyPy alle Optimierungen durch, während das Programm ausgeführt wird. Daher muss eine Menge Kosten gewichtet werden, und einige Optimierungen werden nicht angewendet deswegen. So wie AOT-Compiler 3 Monate damit verbringen könnten, Ihren Code zu analysieren, um einen WIRKLICH SCHNELLEN CODE zu generieren, könnten JIT-Optimierer Minuten damit verbringen, Ihren Code zu analysieren. In keinem Fall werden sich die Kosten wahrscheinlich auszahlen, daher tun sie das nicht.
Das Ausführen von AOT-Compilern für Python ist viel schwieriger, da Python eine dynamische Sprache ist. AOT-Compiler wie Shedskin – Ein experimenteller (eingeschränkter Python) -zu-C ++ – Compiler , verwenden Sie stattdessen eine eingeschränkte Teilmenge von Python, um sie statisch analysieren zu können. Dieser Ansatz ähnelt dem eine von RPython, auf der PyPy basiert.