Zwei Konzepte helfen uns möglicherweise dabei, besser zu verstehen, warum Python, das mit nativem Maschinencode kompiliert wurde, möglicherweise nicht so schnell ausgeführt wird wie kompiliertes C oder andere häufig kompilierte Sprachen. Sie werden als Frühbindung und Spätbindung bezeichnet.
Zunächst sollte ich sagen, dass ich kein Python-Experte bin und zufällig auf diese Site gekommen bin. Aber ich mag diese Seite.
Wie in einer anderen Antwort erwähnt, kann der C ++ - Compiler viel über das Programm wissen und Entscheidungen darüber treffen, welche Operationen für bestimmte Datenstrukturen verwendet werden sollen. Wenn beispielsweise zwei Ganzzahlvariablen zusammenaddiert werden müssen, weiß der Compiler, dass es sich um native Ganzzahlen handelt, die beispielsweise 32 Bit breit sind, und kann sie mit einem "ADD" -Befehl zusammenaddieren. So kompiliert es den ADD-Befehl in den Code. Es ist gesperrt und kann nicht geändert werden, während das Programm ausgeführt wird. Das ist frühzeitig verbindlich.
Andererseits können wir in einer Sprache wie Python erwarten, dass das Programm verschiedene Datentypen auf komplexe Weise zusammenführt. Der Compiler weiß jetzt nicht, ob es sich bei unseren 2 Variablen um Ganzzahlen, Gleitkommazahlen, Zeichenfolgen oder Listen handelt. Daher muss Code kompiliert werden, der diese Informationen zur Laufzeit ermittelt, und der richtige Vorgang muss ausgewählt werden, während das Programm ausgeführt wird. Dies ist eine späte Bindung und wir können verstehen, dass es einen Leistungseinbruch geben wird, wenn Sie diese zusätzliche Arbeit ausführen, während das Programm ausgeführt wird. Es ist der Preis, den Sie zahlen, wenn Sie diese Optionen in einer Sprache wie Python offen halten, aber es bietet maximale Laufzeitflexibilität.