A quoi sert le mot clé yield en Python?

Quelle est l’utilité du mot-clé yield en Python ? Et a quoi sert-il ?

Par exemple, j’essaie de comprendre le code suivant :

def test():
    last, current = 0, 1
    while True: 
        yield current
        last, current = current, last + current

yield est comme return - il renvoie ce que vous lui demandez (comme un générateur). La différence est que la prochaine fois que vous appelez le générateur, l’exécution commence à partir du dernier appel à l’instruction yield. Contrairement à return, le bloc de la pile n’est pas nettoyé lorsqu’un yield se produit, mais le contrôle est transféré à l’appelant, de sorte que son état reprendra la prochaine fois que la fonction sera appelée.

Exemple:

>>> def f():
...   yield 1
...   yield 2
...   yield 3
... 
>>> g = f()
>>> for i in g:
...   print(i)
... 
1
2
3
>>> for i in g:
...   print(i)
... 
>>> # Notez que cette fois, rien n'a été affiché

Je suppose que vous avez déjà vu l’instruction return.

Par métaphore, return et yield sont des jumeaux. return signifie « retourner et arrêter » alors que yield signifie « retourner, mais continuer ».