Heim > Artikel > Backend-Entwicklung > Warum Python langsam ist
Python ist eine dynamisch typisierte, interpretierte Sprache. Es ist bekannt, dass Python langsam läuft. Seine Eigenschaft, dass alles ein Objekt ist, ist einer der Gründe für seine langsame Ausführung Gründe, warum Python aus verschiedenen Gründen langsam ist.
Dynamische Typisierung
Python wird dynamisch und nicht statisch typisiert, was bedeutet, dass bei der Ausführung des Programms Der Interpreter kennt den Typ der Variablen nicht. Bei der Sprache C kennt der Compiler den Typ einer Variablen, wenn sie deklariert wird; bei Python weiß er erst, dass es sich bei einer Variablen um eine Art Python-Objekt handelt, wenn das Programm ausgeführt wird.
Für den folgenden C-Code
int a = 1; int b = 2; int c = a + b;
Der Compiler weiß immer, dass a und b Ganzzahlen sind. Beim Durchführen der Additionsoperation ist der Vorgang wie folgt:
Put c1d486739592e19159663e7144ffa124 1 ist a
und bd43222e33876353aff11e13a7dc75f6 2 ist b zugewiesen
Binary_add4101e4c0559e7df80e541d0df514fd80(a, b)
aufrufen und das Ergebnis anzeigen ist c zugewiesen
Der Python-Code, der dieselbe Funktion implementiert, lautet wie folgt:
a = 1 b = 2 c = a + b
Verwandte Empfehlungen: „Python Video Tutorial“
The Der Interpreter weiß nur, dass 1 und 2 Objekte sind, aber der Typ dieses Objekts ist nicht bekannt. Daher muss der Interpreter den PyObject_HEAD jeder Variablen überprüfen, um den Variablentyp zu kennen, dann die entsprechende Additionsoperation ausführen und schließlich ein neues Python-Objekt erstellen, um den Rückgabewert zu speichern. Der allgemeine Vorgang ist wie folgt:
Der erste Schritt: Weisen Sie 1 einem
1 zu Zweiter Schritt: Weisen Sie b
1 zu 🎜>Im dritten Schritt rufen Sie Binary_add4101e4c0559e7df80e541d0df514fd80(a, b) auf
1.a->PyObject_HEAD, um die Typkodierung zu erhalten
2.a ist ein ganzzahliger Wert; Holen Sie sich die Typkodierung für a->val
Python ist eine interpretierte Sprache
Das Obige führt einen Unterschied zwischen interpretiertem Code und kompiliertem Code ein. Intelligente Compiler können wiederholte oder unnötige Vorgänge im Voraus antizipieren und optimieren, was zu Leistungsverbesserungen führen kann. Compiler sind ein großes Thema und werden hier nicht behandelt.Pythons Objektmodell führt zu ineffizientem Speicherzugriff
Im Vergleich zu den Ganzzahlen der C-Sprache haben wir darauf hingewiesen, dass Python über eine zusätzliche Informationsebene verfügt. Schauen wir uns nun die Array-Situation an. In Python können wir das in der Standardbibliothek bereitgestellte List-Objekt verwenden; in der Sprache C verwenden wir ein pufferbasiertes Array.
Das einfachste NumPy-Array ist ein Python-Objekt, das um C-Daten herum aufgebaut ist, was bedeutet, dass es einen Zeiger auf einen Puffer zusammenhängender Daten hat. Die Liste von Python enthält Zeiger auf kontinuierliche Zeigerpuffer. In Kombination mit dem obigen Beispiel handelt es sich bei diesen Python-Objekten um ein Ganzzahlobjekt. Diese Struktur sieht wie folgt aus: Es ist leicht zu erkennen, dass das Speicherlayout von Numpy effizienter ist als das Speicherlayout von Python, wenn Sie Vorgänge ausführen, die die Daten der Reihe nach durchgehen, sowohl im Hinblick auf Speicherkosten als auch auf Zugriff Zeitaufwand.Das obige ist der detaillierte Inhalt vonWarum Python langsam ist. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!