Les statistiques de fréquentation d’un blog peuvent être surprenantes. Ainsi vous êtes nombreux à arriver ici en faisant une recherche sur la fonction yield de Python.
Pour la comprendre, il faut d’abord savoir ce qu’est un générateur. Pour simplifier un générateur est une fonction qui retourne successivement plusieurs valeurs. Non pas en utilisant le mot réservé RETURN, mais en utilisant YIELD.
L’ambiguïté qu’il faut signaler est que dans le langage courant, on confond souvent la fonction et l’objet généré.
Dans l’exemple suivant, la fonction CouleurIterateur (), qui émule un feu tricolore, renvoie à chaque fois que l’on rencontre YIELD, successivement :
Vert, Orange et Rouge
# Wouf 2008
def CouleurIterateur ():
while 1: #Une boucle infinie
for i in (‘Vert’,‘Orange’,‘Rouge’):
yield i
# A chaque instruction yield
# rencontrée l’execution
# s’arrête, la fonction
# renvoie i.
# L’execution reprendra
# Au prochain next()
couleur=CouleurIterateur()
for i in range(10) :
print couleur.next()
Dans le corps du programme l’instruction couleur=CouleurIterateur() crée un objet itérateur qui bénéficie, et c’est là l’intérêt de YIELD de la popriété next():
La première fois que le programme rencontre couleur.next(), il va exécuter la fonction CouleurIterateur () jusqu’à rencontrer YIELD, il va à ce moment là geler l’exécution de la fonction et retourner la valeur de i (Soit : Vert)
La seconde fois, et les fois suivante où le programme rencontrera couleur.next() (Il y a dix itérations dans cet exemple) , c’est pareil, il exécutera le code jusqu’à YIELD, gèlera l’exécution, et renverra la valeur de i.