Warum Python langsam ist

爱喝马黛茶的安东尼
Freigeben: 2019-06-25 16:07:50
Original
3008 Leute haben es durchsucht

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.

Warum Python 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;
Nach dem Login kopieren

Der Compiler weiß immer, dass a und b Ganzzahlen sind. Beim Durchführen der Additionsoperation ist der Vorgang wie folgt:

Put < int> 1 ist a

und 2 ist b zugewiesen

Binary_add(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
Nach dem Login kopieren

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_add(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

3.b->PyObject_HEAD

4.b ist eine Ganzzahl, der Wert ist b->val

5. Rufen Sie Binary_add(a->val, b->val) auf

6. Das Ergebnis ist eine Ganzzahl und wird im Ergebnis gespeichert

Der vierte Schritt ist um Objekt c zu erstellen

1. Setzen Sie c->PyObject_HEAD->typecode auf integer

2. Setzen Sie c->val auf result

Dynamischer Typ bedeutet das Jeder Vorgang wird ausgeführt. Es sind weitere Schritte erforderlich. Dies ist der Hauptgrund, warum Pythons numerische Operationen langsamer sind als die C-Sprache

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!