Maison >développement back-end >Tutoriel Python >Pourquoi le code Python est-il plus rapide dans les fonctions ?

Pourquoi le code Python est-il plus rapide dans les fonctions ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-12 22:01:01656parcourir

Why is Python Code Faster Inside Functions?

Code Python plus rapide dans les fonctions : dévoilement de l'exécution optimisée

Lors de l'exécution de code Python, l'inclusion d'opérations dans des fonctions entraîne souvent des gains de performances significatifs. Cette différence marquée suscite la curiosité :为何 Python 代码在函数中执行更快?

Enquête sur la disparité de vitesse

Considérez les extraits de code suivants :

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

Courir ce code donne un temps d'environ 1,8 seconde. Cependant, lorsque la boucle for est exécutée en dehors d'une fonction :

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

L'exécution prend beaucoup plus de 4,5 secondes.

Analyse du bytecode : découvrir la raison sous-jacente

Pour comprendre cet écart de performances, nous examinons le bytecode généré par Python. À l'intérieur d'une fonction, le bytecode affiche une séquence d'opérations qui établissent une boucle, calculent la plage et la parcourent. Cette structure est optimisée pour la vitesse.

Au niveau supérieur, le bytecode diffère légèrement. La variable i est déclarée comme globale, ce qui entraîne une opération de magasin plus lente (STORE_NAME) que l'opération de magasin local (STORE_FAST) utilisée dans la fonction.

Pour examiner le bytecode, le module dis fournit une aide précieuse. Les commandes suivantes démontent respectivement la fonction et le code de niveau supérieur :

import dis
dis.dis(main)
dis.dis(compile('for i in xrange(10**8): pass', '', 'exec'))

Conclusion

L'avantage en termes de performances de l'exécution de code dans des fonctions en Python provient des optimisations dans exécution du bytecode. L'utilisation de variables locales, représentées par l'instruction STORE_FAST, améliore considérablement la vitesse d'exécution par rapport à l'utilisation de variables globales, qui impliquent l'instruction STORE_NAME plus lente.

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