Outils pour utilisateurs

Outils du site


xplage

Ceci est une ancienne révision du document !


Un xrange qui accepte les entiers longs

Objectif

L'itérateur xrange() est très rapide, mais il a un défaut: il ne supporte pas les entiers longs parce qu'il utilise les types de données du C.

Voilà un itérateur qui fait la même chose que xrange, mais qui n'a pas le même défaut. En contrepartie, il est un peu moins rapide.

Un avantage, c'est qu'il permet de conserver les boucles for au lieu de while avec les entiers longs, ce qui rend le code plus clair.

Code

Voilà le code proposé:

def xplage(*arg):
    la = len(arg)
    if la == 1:
        xmin, xmax, xpas = 0, arg[0], 1
    elif la == 2:
        xmin, xmax, xpas = arg[0], arg[1], 1
    elif la == 3:
        xmin, xmax, xpas = arg[0], arg[1], arg[2]
    else:
        raise ValueError ("Erreur xplage: nombre d'arguments doit être 1,2,ou 3")
    if xpas == 0:
        raise ValueError ("Erreur xplage: le pas ne peut être nul")
    x = xmin
    if xpas>0:
        if xmax<xmin:
            raise ValueError ("Erreur xplage: bouclage infini")
        while x<xmax:
            yield x
            x += xpas
    else:
        if xmax>xmin:
            raise ValueError ("Erreur xplage: bouclage infini")
        while x>xmax:
            yield x
            x += xpas

En entrée, on l'utilise de la même façon qu'xrange():

  • avec un argument: c'est xmax (xmin=0, xpas=1)
  • avec 2 arguments: ce sont xmin et xmax (xpas=1)
  • avec 3 arguments: ce sont xmin, xmax et xpas

Cela marche avec xmax<xmin à condition, bien sûr, que xpas<0 (sinon, erreur)

Avec xmax>xmin, il faut xpas>0 (sinon, erreur)

Il faut aussi xpas!=0 (sinon, erreur: une boucle avec un pas nul n'a guère de sens…)

Exemples d'utilisation:

for x in xplage(7):
    print x
0
1
2
3
4
5
6
for x in xplage(5,10):
    print x
5
6
7
8
9
for x in xplage(5,10,2):
    print x
5
7
9
for x in xplage(5,-5,-2):
    print x
5
3
1
-1
-3


Amusez-vous bien!

xplage.1263319335.txt.gz · Dernière modification: 2010/01/12 19:02 de tyrtamos

Outils de la page