Maison >développement back-end >Tutoriel Python >Pourquoi le code Python est-il plus rapide dans les fonctions ?
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!