Maison  >  Article  >  développement back-end  >  Pourquoi l'encapsulation de fonctions améliore-t-elle la vitesse d'exécution du code Python ?

Pourquoi l'encapsulation de fonctions améliore-t-elle la vitesse d'exécution du code Python ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-13 07:29:02882parcourir

Why Does Function Encapsulation Enhance Python Code Execution Speed?

Amélioration de la vitesse d'exécution du code grâce à l'encapsulation de fonctions

Lors de l'exécution du code Python, on remarque que le code contenu dans une fonction s'exécute beaucoup plus rapidement que le même code exécuté en dehors d’une fonction. Pour étudier ce phénomène, analysons un simple extrait de code :

def main():
    for i in xrange(10**8):
        pass
main()

Ce code s'exécute en environ 1,8 seconde lorsqu'il est exécuté dans la fonction main(). Cependant, si la boucle for est placée en dehors de la fonction, le temps d'exécution augmente jusqu'à environ 4,5 secondes :

for i in xrange(10**8):
    pass

La raison de cette disparité de performances réside dans la manière dont Python compile le code. Lorsque le code est exécuté dans une fonction, il est compilé sous une forme appelée bytecode. Le bytecode est une séquence d'instructions que la machine virtuelle Python (PVM) exécute plus efficacement que le code Python d'origine.

L'examen du bytecode de l'extrait de code à l'aide du module dis révèle la différence :

Au sein d'une fonction :

  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        

En dehors d'une function :

  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        

La différence cruciale réside dans les instructions aux lignes 16 et 19. Dans la fonction, la variable i est stockée à l'aide de STORE_FAST, qui est optimisé pour les variables locales. Cependant, en dehors de la fonction, i est stocké à l'aide de STORE_NAME, qui nécessite plus de calculs puisqu'il concerne des variables globales.

Par conséquent, en encapsulant le code dans une fonction, nous optimisons le stockage et la récupération des variables, ce qui entraîne dans des temps d'exécution plus rapides.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn