[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