LangageGenerateurs

[wiki: Générateurs]

PageOutline

Générateurs

#!comment
Typique de ce que fait xrange au lieu de range en Python 2.
  • C’est une fonction utilisant « yield » au lieu de « return », destinée à fournir une séquence de résultats :
  • l’appel à la fonction retourne un itérateur,
  • chaque appel de next() sur l’itérateur provoque la reprise de l’éxécution de la fonction jusqu’au prochain yield,
  • quand un appel de next() amène à sortir de la fonction sans rencontrer de yield, une exception !StopIteration est levée.

>>> def gen():
... yield 1
... yield 2

>>> g = gen()

>>> g
<generator object gen at ...>

>>> next(g)
1

>>> next(g)
2

>>> next(g)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration


  • Les boucles for et les fonctions supportant les itérateurs peuvent exploiter un générateur.
>>> def fibo(n):
...     a, b = 0, 1
...     while b < n:
...         yield b
...         a, b = b, a + b


>>> for i in fibo(6): print i
1
1
2
3
5

>>> g = fibo(3)

>>> next(g)
1

>>> sum(fibo(6))
12