ANTISECHE
Pour ne plus rien oublier !

Python - range() ou xrange() pour des boucles itératives

jeudi 06 juin 2013

Contexte

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.

Qu’est-ce qu’une boucle itérative ?

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

Mais, où est donc le problème ?

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 pour Python 3 ?

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().

Aucun commentaire

Fil RSS des commentaires de cet article

Écrire un commentaire

Contenu de votre message :

Votre nom ou pseudo :

Votre site Internet (facultatif) :

Votre adresse e-mail (facultatif) :

Quelle est la première lettre du mot yvwj ? : 

CopyLeft - 2013-17 - Toutes gauches réservées - Licence CC-BY

Valide xHtml 1.0 STRICT | Fièrement propulsé par PluXml | 0.018s | 5570 vues