Ich habe überraschendes Python-Verhalten entdeckt, während ich den Thread Warum liest man Zeilen von stdin in C ++ viel langsamer als in Python? .
Wenn ich einfachen Python-Code von diesem Thread ausführen
%Vor%es funktioniert mit Geschwindigkeit 11.5M LPS, und wenn ich das ganze Skript in einzelne Funktion zerlegen
%Vor%Code beschleunigt bis zu 23M LPS.
Warum macht dieses einfache Refactoring meinen Code 2 mal schneller?
Ich habe meine Tests mit Python2.7 unter Ubuntu 13.10 durchgeführt.
Auf Bytecode zu schauen hat mir geholfen, diese Frage zu beantworten. Byte-Code für den Arbeitsteil des ersten Skripts ist:
%Vor%Und der Bytecode für den entsprechenden Teil des zweiten Skripts lautet:
%Vor%Ich sehe, dass der tatsächliche Unterschied zwischen diesen Codes LOAD_NAME vs LOAD_FAST und STORE_NAME vs STORE_FAST Opcodes mit ist. Dokumentation Ссылка sagt das Mit LOAD_FAST wird nur mit Indizes gesucht, während mit LOAD_NAME nach Zeichenfolge gesucht wird. Und der erste Ansatz ist zweimal schneller.
Tags und Links python performance