Schnellerer Python-Code in Funktionen: Enthüllung der optimierten Ausführung
Bei der Ausführung von Python-Code führt das Einschließen von Vorgängen in Funktionen häufig zu erheblichen Leistungssteigerungen. Dieser deutliche Unterschied macht neugierig:为何 Python 代码在函数中执行更快?
Untersuchung der Geschwindigkeitsunterschiede
Bedenken Sie den folgenden Code Schnipsel:
def main(): for i in xrange(10**8): pass main()
Das Ausführen dieses Codes führt zu einer Zeit von etwa 1,8 Sekunden. Wenn die for-Schleife jedoch außerhalb einer Funktion ausgeführt wird:
for i in xrange(10**8): pass
Die Ausführung dauert viel länger (4,5 Sekunden).
Bytecode-Analyse: Den zugrunde liegenden Grund aufdecken
Um diese Leistungsdiskrepanz zu verstehen, untersuchen wir den von Python generierten Bytecode. Innerhalb einer Funktion zeigt der Bytecode eine Folge von Operationen an, die eine Schleife aufbauen, den Bereich berechnen und diese durchlaufen. Diese Struktur ist auf Geschwindigkeit optimiert.
Auf der obersten Ebene unterscheidet sich der Bytecode geringfügig. Die Variable i wird als global deklariert, was zu einem langsameren Speichervorgang (STORE_NAME) als dem in der Funktion verwendeten lokalen Speichervorgang (STORE_FAST) führt.
Um Bytecode zu untersuchen, bietet das Modul dis wertvolle Hilfe. Die folgenden Befehle zerlegen die Funktion bzw. den Code der obersten Ebene:
import dis dis.dis(main) dis.dis(compile('for i in xrange(10**8): pass', '', 'exec'))
Fazit
Der Leistungsvorteil der Ausführung von Code innerhalb von Funktionen in Python ergibt sich aus Optimierungen in Bytecode-Ausführung. Die Verwendung lokaler Variablen, dargestellt durch die Anweisung STORE_FAST, verbessert die Ausführungsgeschwindigkeit erheblich im Vergleich zur Verwendung globaler Variablen, die die langsamere Anweisung STORE_NAME beinhalten.
Das obige ist der detaillierte Inhalt vonWarum ist Python-Code in Funktionen schneller?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!