Maison >interface Web >js tutoriel >Comment utiliser le mot clé de rendement pour contrôler le flux d'exécution dans une fonction de générateur?
yield
pour contrôler le flux d'exécution dans une fonction de générateur? Le mot clé yield
est utilisé dans une fonction pour le transformer en générateur. Au lieu de renvoyer une seule valeur et de se terminer, une fonction de générateur pause son exécution à chaque instruction yield
, renvoyant une valeur à l'appelant. L'état de la fonction est conservé, ce qui lui permet de reprendre l'exécution d'où il s'est arrêté la prochaine fois qu'il s'appelle. Cela permet la génération d'une séquence de valeurs à la demande, plutôt que de générer la séquence entière à la fois.
Illustrons avec un exemple:
<code class="python">def my_generator(n): for i in range(n): yield i*2 gen = my_generator(5) # Create a generator object for num in gen: print(num) # Output: 0, 2, 4, 6, 8</code>
Dans cet exemple, my_generator
ne renvoie pas de liste. Au lieu de cela, chaque appel à next(gen)
(implicitement fait dans la boucle for
) exécute la fonction jusqu'à ce que l'instruction yield
suivant soit rencontrée. La valeur donnée est renvoyée et l'état de la fonction est enregistré. L'appel suivant au next(gen)
reprend du point après le dernier yield
. Le générateur se termine lorsque la fonction termine son exécution sans rencontrer un autre yield
.
yield
sur le renvoi d'une liste? L'utilisation de générateurs avec yield
offre plusieurs avantages par rapport au retour d'une liste:
En bref, les générateurs sont idéaux lorsque vous devez produire une séquence de valeurs de manière itérative, sans la surcharge de mémoire de stockage de la séquence entière à la fois.
yield
en conjonction avec d'autres instructions de flux de contrôle comme if
et for
les boucles dans une fonction de générateur? Oui, vous pouvez utiliser librement yield
avec d'autres instructions de flux de contrôle comme if
, elif
, else
, for
et while
boucles à l'intérieur d'une fonction de générateur. Cela permet de créer des séquences complexes et conditionnelles.
Voici un exemple incorporant if
et for
les boucles:
<code class="python">def even_numbers_generator(n): for i in range(n): if i % 2 == 0: yield i even_gen = even_numbers_generator(10) for num in even_gen: print(num) # Output: 0, 2, 4, 6, 8</code>
Ce générateur utilise une for
pour itérater et une condition if
pour filtrer les nombres uniformes, ne donnant que les nombres pair dans la plage spécifiée.
yield
diffère-t-il du mot clé return
dans le contexte d'une fonction de générateur?La différence clé réside dans la façon dont ils affectent l'exécution de la fonction:
yield
: pause l'exécution de la fonction, renvoie une valeur et préserve l'état de la fonction. La fonction peut être reproduite d'où elle s'était arrêtée.return
: termine complètement l'exécution de la fonction. L'état de la fonction est perdu et aucune autre valeur ne peut être générée. Une instruction return
dans une fonction de générateur signale la fin de la séquence. Essentiellement, yield
crée un itérateur, tandis que return
fournit un résultat final et met fin au processus. L'utilisation return
dans une fonction de générateur est généralement effectuée pour signaler la fin de la séquence, bien qu'il soit également possible de return
une valeur en plus de donner des valeurs (bien que cela soit moins courant). L'utilisation return
sans donner de valeurs créerait simplement une fonction régulière, pas un générateur.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!