[Linux-bruxelles] Python que oui, python que non

Frederic Peters fpeters at entrouvert.be
Ven 6 Fév 18:47:52 CET 2004


> J'ai un point qui me chiffonne, les boucles for.
> Si j'ai bien compris on doit faire comme ceci :
> 
> for x in range(1, n):
>        print repr(x).rjust(2)

Plus généralement: for x in sequence

La séquence peut être n'importe quel objet dit "itérable", par exemple
une liste.

for x in ['a', 'b', 'c']:
        print x

> Et si j'ai vu juste range crée une liste !

Oui.

range(n)       -> [0, 1, 2 ... n-1]
range(n, m)    -> [n, n+1, n+2 ... m-1]
range(n, m, q) -> [n, n+(1*q), n+(2*q) ... m-TODO]

> J'ai donc pris l'interpréteur python
> puis j'ai tapé ceci :
> 
> def p_range(n):
>    """range vous avez dis range !?!"""
>    for x in range(1, n):
>        print repr(x).rjust(2)

Oui...  (mais pourquoi le repr() ?  Et pourquoi le rjust() ?)

> Ensuite j'ai appelé la fonction
> 
> p_range(10)
> 
> Le comportement ne pose pas  de problème

Ok.


> Puis j'ai réessayé avec un nombre très grand, je vous conseille de 
> prendre un deuxième terminal en tant que root et d'exécuter top, il faut 
> le faire
> avant parce qu'après ce n'est plus possible avant un long moment.
> 
> p_range(100000000)

Chouette, un grand.


> Et la,  boom  la machine  est litéralement  hors  d'usage, il est même 
> conseillé de rebooter après car python n'affiche rien, il mange la 
> mémoire goulument
> puis de termine en signalant "processus arrêté".

À cause de l'OS qui le tue.  Méchant OS.


> Alors qu'un c, en tcl, en assembleur je n'ai encore jamais eu ce problème.

Mais le code ne faisait pas la même chose...


> Dites moi si je fais une erreur.

Pas vraiment mais tu crées une liste un peu trop grande pour ton
ordinateur.  Comptons ensemble:
 100000000 d'éléments qui font au minimum 4 octets -> 400 mégas
 consommés dans une liste.

Alors, soit:

i = 1
while i < n:
    print i
    i += 1

Soit tu utilises xrange() plutôt que range().


        Frédéric

-- 
Utilisation des listes du BxLUG: http://www.bxlug.be/utilisation-mailinglists
Toi aussi, apprends le français: http://www.foo.be/~steph/cours/FLE/




Plus d'informations sur la liste de diffusion Linux-bruxelles