Poster un commentaire à la suite de l’article...

jeudi 20 octobre 2011
par  Alain BUSSER

Boucles et itérateurs en Python

Séquence de TP sur les boucles à nombre prédéterminé d’exécutions à la sauce Python.

En réponse à...

Logo de Alain BUSSER
lundi 14 novembre 2011 à 15h17 - par  Alain BUSSER

Suite de cette passionnante et fondamentale discussion sur le thème de « puisqu’en Python, tout est objet, est-ce que les boucles en sont aussi ? ».

Afin d’abréger les insomnies que les lecteurs de cet article n’ont pas manqué de subir, hantés par l’angoisse de savoir si, oui on non, les boucles de Python sont des objets, j’ai contacté un des nombreux auteurs qui osent prétendre, les hardis personnages, que « en Python, tout est objet ». Il m’a très diligemment répondu qu’effectivement, les boucles ne sont pas des objets, et avec sa permission, je reproduis ici sa réponse, empreinte d’une humilité sur laquelle nous devrions peut-être prendre exemple :

Think about it — if it was an object, you
should be able to store it, introspect it, print it, call methods on
it. But you can’t do any of those for a loop.

You may be thinking of iterators, which *are* objects. They have
state, methods, etc. But a loop is more (or less !) than an iterator.
And a while-loop doesn’t use an iterator.

Guido

Comme mon correspondant l’a souligné, j’avais donc confondu les itérateurs (qui, eux, sont des objets, si j’ose en croire mon correspondant) avec les boucles que les itérateurs en question remplacent avantageusement face à des élèves qui ont du mal à « suivre le mouvement » de la boucle, et qui préfèrent manipuler des objets statiques à la place. D’ailleurs, même René Grothmann a fini par adopter des « boucles statiques » (je ne sais pas comment les appeler faute de mieux ) dans Euler Math Toolbox. Je n’aurais donc pas du écrire « En Python, tout est objet, même les boucles » mais « En Python, tout est objet, même les itérateurs ». Je compte d’ailleurs m’autoflageller à coup de tortues LOGO pour me punir d’avoir osé faire la confusion. Je repasse la parole à mon nouveau correspondant, que je serais assez enclin à considérer comme un spécialiste de Python :

for-loop iterating over « sequences » (instead of the Pascal’s
« arithmetic progression » for-loop or C’s « roll your own » for-loop) is
a pretty common feature now, found in many other languages. It is also
often known as « for each » and even Java has one nowadays.

Guido

Il est remarquable comme parfois, l’opinion que l’on se fait de l’étendue de ses propres connaissances sur un sujet, est inversement proportionnelle à l’étendue réelle desdites connaissances : Qui eût cru qu’un tel spécialiste de la question prendrait le temps de répondre à une question finalement bien futile face aux difficultés que l’on peut vivre en classe ?

for n in range(1000):
   print('mille fois merci, Guido')

Voilà, la paix peut enfin régner sur l’IREM, tout le monde peut à nouveau dormir tranquille après cette très indispensable mise au point, puisque nous savons enfin la vérité : Les boucles ne sont pas des objets, seuls les itérateurs le sont !

modération a priori

Ce forum est modéré a priori : votre contribution n’apparaîtra qu’après avoir été validée par un administrateur du site.

Qui êtes-vous ?
Votre message

Pour créer des paragraphes, laissez simplement des lignes vides.