Lorsque l'on utilise Python pour modéliser des systèmes complexes, l'utilisation de boucles itératives est extrêmement courante. Car, pour obtenir des résultats probants, il est très souvent nécessaire de reproduire le calcul plus d’un million de fois. Cela nécessite donc l’emploi de structures de boucles itératives.
En langage C, une boucle itérative se fait par l’intermédiaire de la structure For(){ }
:
#include
int main(void){
int nb_marches;
for(nb_marches = 1; nb_marches <= 60; nb_marches++) {
printf("%d ", nb_marches);
}
return 0;
}
En Python, vous trouverez majoritairement dans la littérature cette forme là :
for i in range(5):
print i
Le code Python, proposé ci-dessus, peut se décomposer de façon complètement identique comme ça:
liste = range(5)
for i in liste:
print i
Vous voyez donc apparaître là un problème ? Regardez bien, si vous souhaitez boucler plus d’un million de fois. La fonction Range() va nous générer une liste d’un million de composant qui sera gardée en mémoire jusqu’à la fin de l’exécution. Et là, pour le coup ça prend beaucoup de place pour quelque chose qui ne nous sert strictement à rien.
Il y aurait la solution moche de boucler avec une structure While comme ça:
i = 0
While i<1000000 :
print i
i = i + 1
Mais, Python nous propose tout simplement la function xrange() qui est exactement la même fonction que range() à la différence qu’elle ne génère pas une liste entière mais fonctionne de façon parfaitement itérative et donc n’utilise pas plus de mémoire pour un million de boucles que pour 3 boucles. Cela nous donne donc :
for i in xrange(1000000):
print i
Il est donc fortement conseillé de prendre l’habitude d’utiliser la function xrange() dans le cas de boucles itératives en Python.
Et bien la fonction xrange() n'existe tout simplement pas en Python 3 parce que la fonction range() a été amélioré et ne soufre plus du problème de l'empreinte mémoire. Donc, en Python 3, on peut utiliser sans se poser de questions la fonction range().
CopyLeft - 2013-17 - Toutes gauches réservées - Licence CC-BY
Valide xHtml 1.0 STRICT | Fièrement propulsé par PluXml | 0.006s | 141515 vues
Aucun commentaire
Fil RSS des commentaires de cet article