Maison > Article > développement back-end > Pourquoi l'encapsulation du code dans les fonctions augmente-t-elle les performances de Python ?
Optimisation des performances du code Python avec des fonctions
Il a été observé que l'exécution de code spécifique dans des fonctions en Python améliore considérablement sa vitesse d'exécution. Examinons les raisons de ce comportement curieux.
Initialement, une boucle for était encapsulée dans une fonction :
def main(): for i in xrange(10**8): pass main()
Ce code présente des performances louables, s'exécutant en moins de 2 secondes. Cependant, lorsque la boucle for était exécutée indépendamment, sans être enfermée dans une fonction :
for i in xrange(10**8): pass
son temps d'exécution grimpait à plus de 4 secondes. Pour percer le mystère derrière cette disparité, nous devons nous plonger dans le bytecode généré par l'interpréteur Python.
En examinant le bytecode de la fonction, nous remarquons que la variable i est assignée à l'aide de l'opcode STORE_FAST.
LOAD_FAST 0 (i)
Lorsque la boucle for est exécutée au niveau supérieur, la variable i est affectée à l'aide du STORE_NAME opcode.
STORE_NAME 1 (i)
Il a été établi que STORE_FAST est une opération plus efficace que STORE_NAME. Cette efficacité vient du fait que lorsque i est une variable locale au sein d'une fonction (en utilisant STORE_FAST), elle est stockée sur le frame de pile. En revanche, lorsque i est une variable globale (en utilisant STORE_NAME), elle doit être stockée dans le dictionnaire des variables globales.
Pour inspecter davantage le bytecode, vous pouvez utiliser le module dis. Pour le démontage direct d'une fonction, le module dis peut être utilisé. Cependant, pour le désassemblage du code exécuté au niveau supérieur, la compilation intégrée doit être exploitée.
En comprenant les opérations de bytecode sous-jacentes, nous pouvons exploiter la puissance des fonctions de Python pour optimiser efficacement la vitesse d'exécution du code.
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!