Heim >Backend-Entwicklung >Python-Tutorial >Warum verbessert die Funktionskapselung die Ausführungsgeschwindigkeit von Python-Code?
Verbesserung der Codeausführungsgeschwindigkeit durch Funktionskapselung
Beim Ausführen von Python-Code fällt auf, dass in einer Funktion enthaltener Code deutlich schneller ausgeführt wird als der Derselbe Code wird außerhalb einer Funktion ausgeführt. Um dieses Phänomen zu untersuchen, analysieren wir einen einfachen Codeausschnitt:
def main(): for i in xrange(10**8): pass main()
Dieser Code wird in etwa 1,8 Sekunden ausgeführt, wenn er innerhalb der Funktion main() ausgeführt wird. Wenn die for-Schleife jedoch außerhalb der Funktion platziert wird, erhöht sich die Ausführungszeit auf etwa 4,5 Sekunden:
for i in xrange(10**8): pass
Der Grund für diese Leistungsunterschiede liegt in der Art und Weise, wie Python Code kompiliert. Wenn der Code innerhalb einer Funktion ausgeführt wird, wird er in eine Form kompiliert, die als Bytecode bezeichnet wird. Bytecode ist eine Folge von Anweisungen, die die Python Virtual Machine (PVM) effizienter ausführt als der ursprüngliche Python-Code.
Eine Untersuchung des Bytecodes für das Code-Snippet mit dem Modul dis zeigt den Unterschied:
Innerhalb einer Funktion:
2 0 SETUP_LOOP 20 (to 23) 3 LOAD_GLOBAL 0 (xrange) 6 LOAD_CONST 3 (100000000) 9 CALL_FUNCTION 1 12 GET_ITER >> 13 FOR_ITER 6 (to 22) 16 STORE_FAST 0 (i) 3 19 JUMP_ABSOLUTE 13 >> 22 POP_BLOCK >> 23 LOAD_CONST 0 (None) 26 RETURN_VALUE
Außerhalb einer Funktion:
1 0 SETUP_LOOP 20 (to 23) 3 LOAD_NAME 0 (xrange) 6 LOAD_CONST 3 (100000000) 9 CALL_FUNCTION 1 12 GET_ITER >> 13 FOR_ITER 6 (to 22) 16 STORE_NAME 1 (i) 2 19 JUMP_ABSOLUTE 13 >> 22 POP_BLOCK >> 23 LOAD_CONST 2 (None) 26 RETURN_VALUE
Der entscheidende Unterschied liegt in den Anweisungen in den Zeilen 16 und 19. Innerhalb der Funktion wird die Variable i mit STORE_FAST gespeichert, das für lokale Variablen optimiert ist. Außerhalb der Funktion wird i jedoch mit STORE_NAME gespeichert, was rechenintensiver ist, da es sich auf globale Variablen bezieht.
Daher optimieren wir durch die Kapselung des Codes innerhalb einer Funktion die Speicherung und den Abruf von Variablen, was zu einem Ergebnis führt in schnelleren Ausführungszeiten.
Das obige ist der detaillierte Inhalt vonWarum verbessert die Funktionskapselung die Ausführungsgeschwindigkeit von Python-Code?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!