Dis papa, dis papa, dis-moi, dis-moi. Comment c’est fait dans une boucle for ?


Dis papa, dis papa, dis-moi, dis-moi. Comment c’est fait dans une boucle for ?

C’est pas compliquéééééééééééé, j’vais tout t’expliquuuuuerrrrrrrrrr.

C´est le p´tit zinzin qui passe par ici:

>>> class MonIterable(object): # faisons notre propre itérable
...
...     def __init__(self):
...         self.values = [1, 2]
...
...     def __iter__(self): # ('for' appelle __iter__ automatiquement)
...         return self # __iter__ doit renvoyer un iterateur, ici nous-même
...
...     def next(self): # chaque tour de boucle, for appelle next()
...         if self.values: # qui retourne une des valeus de self.values
...             return self.values.pop() # en l'enlevant de la liste initiale
...         raise StopIteration() # si il y en a plus, il dit stop !
...

Et qui va toucher le p´tit machinnnnnnnnnnnnnnnnnnnnnnnnn !

>>> for x in MonIterable(): # ceci appelle next() jusqu'à StopIteration
...    print x
2
1

Et le p´tit machin qui repasse par là:

>>> iterateur = iter(MonIterable()) # Voilà ce que ça donne à la main
>>> iterateur.next()
2
>>> iterateur.next()
1
>>> iterateur.next() # l'exception: mécanisme naturel de Python pour stopper une boucle !
Traceback (most recent call last):
  File "<pyshell#9>", line 19, in <module>
    iterateur.next()
  File "<pyshell#9>", line 14, in next
    raise StopIteration()
StopIteration

Et qui fait marcher ce p´tit zinzinnnnnnnnnnnnn !

>>> iterateur = iter(range(3)) # c'est pareil pour tous les iterables
>>> iterateur.next() # un iterateur est juste un truc avec une méthode next()
0
>>> iterateur.next() # next() doit retourner la prochain valeur de l'iterable
1
>>> iterateur.next() # un itérateur itère donc sur un iterable
2
>>> iterateur.next() # jusqu'à la fin, où il lève StopIteratino
Traceback (most recent call last):
  File "<ipython-input-19-6c9f9efdd35c>", line 1, in <module>
    iterateur.next()
StopIteration

Ah bon ?

14 thoughts on “Dis papa, dis papa, dis-moi, dis-moi. Comment c’est fait dans une boucle for ?

  • chassegnouf

    Les boucles For, Ca me rappelle mes cours d’informatique au lycée (en 1ère S) sur TurboPascal (j’ai pas fait de programmation depuis ^^’)

  • Sam Post author

    Mais kesssss tu fous sur ce site alors ? Tu viens que pour les articles de pron ?

  • anon

    Plus ou moins, sam, c’est pas le seul.
    On vient pour la prog, on revient pour le pron.
    Je connais même pas python, donc je suis déçu par l’article, ça manque d’images.

    Ps : je vous ai référencé sur un mon site -18 préféré, ça va vous faire des visiteurs passionnés.

  • Kontre

    En tout cas vu la chanson de référence, on peut considérer que cet article parle de sexe.

    Sinon, pour accélérer les boucles for numériques, y’a cython (ça les transforme en boucles for C de base).

  • roro

    Pour ma part, je n’écrit pas de python.
    Je modifie des codes existants, je les recompiles, et…
    Je m’arrache les cheveux et les poils des bras.
    On s’amuse comme on peut…
    Heureusement que “Kontre” relève le niveau..
    Pass’queue ta boucle for..Tu peut te la mettre où je pense..
    Si on commence à aller voir ce qui se passe dans le trou du cul du chien,on est pas sorti…

  • roro

    T’ain! y se passe vraiment des trucs bizarres sur ce site.
    Y’a un bonhomme à tête de concombre qui est subitement apparut à coté de mon message …!

  • chassegnouf

    En fait, on vient tous pour le pron. En fait, je viens surtout pour le ton étant donné que je ne suis pas branché minou ^^

    Puis je désespère pas, un jour, je réapprendrais à programmer -_-

  • Sam Post author

    C’est vrai qu’on met jamais de truc gay sur le site. C’est discriminatoire.

    La prochaine fois je posterai un gang bang entre pompiers. Y a pas de raison !

    • Sam Post author

      Nan, max m’a confié que des fois il lisait les articles Python lui aussi.

  • JEEK

    La boucle FOR, ça c’est fort… arf’ ^_^

    Python || Pr0n || *

    A la base, je venais pour Python…mais ça, c’était à la base (oui parce que je voulais découvrir python et m’y mettre et puis finalement, j’ai pas plus qu’avant mais je lis tous les articles…même si je ne comprends pas tout) !

    Ouaip j’en maitrise pas plus finalement…parce que les bushMen de chez moi préfèrent rester à capillotracter avec Perl et ne veulent pas entendre parler de Python ; donc je n’ai pas cherché à approfondir (journées de 24h et déjà overQuota pour le temps disponible).

    A l’image de Chassegnouf, le ton du blog me botte (bon par contre, moi je préfère nettement les minous) et ça fait que j’y reviens…

    Et puis voilà ! :-)

  • >Cladmi

    Pour le code sous “Et le p´tit machin qui repasse par là:”  :

    Il manque les parenthèses

    iterateur = iter(MonIterable<strong>()</strong>)

    et les valeurs renvoyées devraient être 2 et 1, au lieu de 0, 1, 2.

  • Sam Post author

    Merci cladmi. Ah on sent que c’est les fêtes et qu’il y a du relachement.

Comments are closed.

Des questions Python sans rapport avec l'article ? Posez-les sur IndexError.