Comment créer de nouveaux modèles d’itération avec les générateurs en Python

Vous voulez implémenter un modèle d’itération personnalisé qui est différent des fonctions intégrées habituelles (par exemple, range(), reversed(), etc.).

Si vous voulez implémenter un nouveau type de modèle d’itération, définissez-le à l’aide d’une fonction générateur. Voici un générateur qui produit une gamme de nombres à virgule flottante:

def frange(debut, arret, increment):
    x = debut
    while x < arret:
        yield x
        x += increment

Pour utiliser une telle fonction, vous itérez sur celle-ci en utilisant une boucle for ou en l’utilisant avec une autre fonction qui consomme un itérable (par exemple, sum(), list(), etc.). Par exemple:

>>> for n in frange(0, 4, 0.5):
...     print(n)
...
0
0.5
1.0
1.5
2.0
2.5
3.0
3.5
>>> list(frange(0, 1, 0.125))
[0, 0.125, 0.25, 0.375, 0.5, 0.625, 0.75, 0.875]
>>>

La simple présence de l’instruction yield dans une fonction la transforme en générateur. Contrairement à une fonction normale, un générateur ne fonctionne qu’en réponse à une itération.

Voici une expérience que vous pouvez essayer pour voir les mécanismes sous-jacents du fonctionnement d’une telle fonction:

La caractéristique principale est qu’une fonction générateur ne fonctionne qu’en réponse aux opérations “next” effectuées pendant le processus d’itération. Une fois qu’une fonction générateur retourne une valeur, l’itération s’arrête.

Cependant, l’instruction for qui est habituellement utilisée pour l’itération s’occupe de ces détails, donc vous n’avez normalement pas besoin de vous inquiéter à leur sujet.

LAISSER UN COMMENTAIRE

Please enter your comment!
Please enter your name here