la commande yield de python
Bonjour à tous,
J'essaye de comprendre l'utilité de la commande yield de python pour cela j'ai cherché sur pas mal de page web mais malheureusement j'ai pas bien compris sa philosophie :oops:(generator iterator etc ...8O)
J'espère trouver quelqu'un qui pourrait m'expliquer en detail le fonctionnement de cette commande.
Merccccccccci
:salut:
Deux exemples d'utilisation de l'instruction field :
Généralement l'usage de l'instruction field est lié à un itérateur qui est "déclenché" par des appels successifs d'une méthode .next() :
Voici deux exemples (que j'ai trouvés sur le net) :
- Premier exemple (voir http://blog.site2wouf.fr/2008/04/pyt...-de-yield.html), celui du feu tricolore des croisements routiers :
Code:
1 2 3 4 5 6 7 8 9
| def CouleurIterateur ():
while 1: # Une boucle infinie !
for i in ('Vert','Orange','Rouge'):
yield i # A chaque instruction yield rencontrée, l’exécution de la
# boucle for s'arrête ; mais elle reprend au prochain appel
# de la méthode .next()
couleur=CouleurIterateur() pour l'objet couleur
for i in range(50) :
print couleur.next(), |
écrit :
Vert Orange Rouge Vert Orange Rouge Vert Orange Rouge Vert Orange Rouge Vert Orange Rouge Vert Orange Rouge Vert Orange Rouge Vert Orange Rouge Vert Orange Rouge Vert Orange Rouge Vert Orange Rouge Vert Orange Rouge Vert Orange Rouge Vert Orange Rouge Vert Orange Rouge Vert Orange Rouge Vert Orange
- Second exemple (voir "http://fr.wikipedia.org/wiki/Python_...e)#Générateurs"), celui de la célèbre suite mathématique de Fibonacci :
Code:
1 2 3 4 5 6 7 8 9
| def gen_fibonacci():
"""Générateur de la suite de Fibonacci"""
a, b = 0, 1
while True:
yield a # Renvoi de la valeur de "a", résultat de l'itération en cours
a, b = b, a + b
fi = gen_fibonacci()
for i in range(50):
print fi.next(), |
écrit :
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121393 196418 317811 514229 832040 1346269 2178309 3524578 5702887 9227465 14930352 24157817 39088169 63245986 102334155 165580141 267914296 433494437 701408733 1134903170 1836311903 2971215073 4807526976 7778742049
J'espère que ces 2 exemples éclaireront le lecteur ...
Papy_77