17.12.2012 Views

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

148<br />

Éléments du langage<br />

DEUXIÈME PARTIE<br />

Generators<br />

La méthode la plus simple pour rendre un objet compatible avec les itérations est d’y<br />

implémenter directement la méthode next() et de renvoyer self dans __iter__().<br />

Iterator simple<br />

>>> class Iterable:<br />

... index = 0<br />

... def __iter__(self):<br />

... return self<br />

... def next(self):<br />

... if self.index > 5:<br />

... raise StopIteration<br />

... self.index += 1<br />

... return self.index<br />

...<br />

>>> for element in Iterable():<br />

... print(element)<br />

...<br />

1<br />

2<br />

3<br />

4<br />

5<br />

6<br />

À SAVOIR Gestion des iterators avec itertool<br />

Le module itertool, présenté dans le chapitre 8, fournit des utilitaires rapides de création et de manipulation<br />

d’iterators.<br />

Les generators permettent de générer de manière très simple et très puissante des iterators.<br />

La création d’un iterator par le biais d’un generator se résume à l’écriture d’une<br />

fonction qui parcourt les éléments de la séquence. Au lieu de retourner ces éléments<br />

par la directive return, la fonction doit faire appel à la directive yield, qui sert à<br />

définir un point de sauvegarde.<br />

Cette fonction peut ensuite être utilisée dans une boucle for sans avoir à implémenter<br />

toute la garniture nécessaire à un iterator, ou à gérer la levée d’une exception<br />

StopIteration.<br />

Generator simple<br />

>>> def iterable():<br />

... print('début de boucle')

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!