UKOnline

Variable locale

Enfin, un dernier élément d'attention, lorsque l'on code en Python et que l'on souhaite écrire un code « pythonique », concerne la différence entre les variables locales et globales. Il faut savoir qu'il est toujours plus rapide d'accéder à une variable locale qu'à une globale, en particulier au sein d'une fonction ou au sein d'une boucle. Voici, par exemple, deux fonctions qui permettent de calculer la somme des nombres contenus dans une séquence, à l'aide d'une boucle while :

La première fonction utilise la variable globale i, initialisée à la première ligne, pour parcourir data et la seconde fonction utilise une variable locale i. La seconde fonction est plus rapide que la première. En effet, on passe de 46 ms à 38 ms pour faire la somme des éléments d'une liste de cent-mille éléments, soit une diminution de temps de 17 %.

Opérateur d'accès

Ne pas utiliser inutilement l'opérateur d'accès, que ce soit pour les listes ou les dictionnaires, permet également d'améliorer les performances. Il est préférable de stocker la valeur d'un élément accédé plusieurs fois dans une variable locale. Voici deux fonctions qui permettent de calculer la valeur d'un polynôme du second degré pour plusieurs valeurs de $x$ :

Quatre variables locales ont été ajoutées dans la seconde fonction. Les variables a, b et c stockent les coefficients du polynôme, qui ne changent pas, mais sont accédés à chaque tour de boucle. La variable x stocke le point courant, pour éviter les deux accès faits dans la première fonction.

La seconde fonction est plus rapide que la première. En effet, on passe de 137 ms à 108 ms pour calculer la valeur du polynôme $x^2 + x + 1$ pour cent-mille $x$, soit une diminution de temps de 21 %. Bien sûr, on peut encore faire mieux en parcourant directement les éléments de data sans passer par les indices et en construisant le résultat avec une liste en compréhension, descendant à 91 ms avec le code suivant :

Appel de fonction

Pour finir, voyons une dernière technique permettant de diminuer le temps d'exécution d'un programme à l'aide de variables locales. On peut améliorer les performances en veillant à ne pas utiliser inutilement l'opérateur d'appel de fonction ou de méthode.

Pour éviter de tels appels inutiles, il faut se rappeler que les fonctions et les méthodes sont des objets, en Python. Il est dès lors possible de les stocker dans des variables, pour ensuite les utiliser directement. C'est précisément ce qu'il faut faire pour améliorer le temps d'exécution lorsque vous appelez plusieurs fois la même fonction ou méthode, notamment dans des boucles.

Voici deux fonctions qui permettent de passer en majuscule la première lettre de tous les mots d'une phrase :

Dans cet exemple, les méthodes append des listes et capitalize des chaines de caractères sont placées dans des variables locales. La seconde fonction est un peu plus rapide que la première. En effet, on passe de 103 ms à 99 ms pour traiter des phrases de dix-mille mots, soit une diminution de temps de 4 %. Cette pratique est moins commune et moins répandue, mais peut parfois s'avérer utile lorsque de nombreux accès à une même fonction sont faits.