Performances améliorées du code Python dans les fonctions
Cette question étudie pourquoi le code Python s'exécute beaucoup plus rapidement lorsqu'il est placé dans une fonction. Dans le code fourni, une boucle parcourt une large plage et le temps d'exécution varie considérablement selon que la boucle est contenue ou non dans une fonction.
Cause de la différence de performances
La différence de performances provient du bytecode sous-jacent généré pour le code. Au sein d'une fonction, le bytecode utilise l'instruction STORE_FAST pour attribuer une valeur à une variable locale. Ce processus est optimisé et généralement plus rapide que l'utilisation de l'instruction STORE_NAME, qui est utilisée pour attribuer une valeur à une variable globale ou non locale.
Analyse du bytecode
Le bytecode pour la boucle à l'intérieur de la fonction est la suivante :
SETUP_LOOP 20 (to 23) LOAD_GLOBAL 0 (xrange) LOAD_CONST 3 (100000000) CALL_FUNCTION 1 GET_ITER FOR_ITER 6 (to 22) STORE_FAST 0 (i) JUMP_ABSOLUTE 13 POP_BLOCK LOAD_CONST 0 (None) RETURN_VALUE
En revanche, le bytecode de la boucle en dehors de la fonction est :
SETUP_LOOP 20 (to 23) LOAD_NAME 0 (xrange) LOAD_CONST 3 (100000000) CALL_FUNCTION 1 GET_ITER FOR_ITER 6 (to 22) STORE_NAME 1 (i) JUMP_ABSOLUTE 13 POP_BLOCK LOAD_CONST 2 (None) RETURN_VALUE
Conclusion
L'utilisation de STORE_FAST au lieu de STORE_NAME dans le bytecode généré pour la boucle au sein de la fonction contribue à sa vitesse d'exécution améliorée. Cela démontre l'importance de comprendre les techniques d'optimisation du bytecode pour améliorer les performances du code Python.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!