single
Fonctions Génératrices
Glissez pour afficher le menu
Une fonction génératrice est un type particulier de fonction qui utilise le mot-clé yield au lieu de return pour générer une séquence de valeurs. Lorsqu'une fonction génératrice est appelée, elle retourne un objet itérateur, qui peut être parcouru pour récupérer les valeurs une à une.
Le principal avantage des fonctions génératrices est leur efficacité mémoire. Au lieu de générer toute la séquence à l'avance et de la stocker en mémoire, les générateurs produisent les valeurs à la volée lorsqu'elles sont nécessaires.
Fonctionnement de yield
Contrairement à return, qui termine complètement la fonction, yield met en pause la fonction et sauvegarde son état. Lors de l'appel suivant à next(), le générateur reprend exactement là où il s'était arrêté :
12345678910def count_up(start, stop): while start <= stop: yield start # Pause and return the current value start += 1 # Resume from here on the next call counter = count_up(1, 3) print(next(counter)) # 1 print(next(counter)) # 2 print(next(counter)) # 3
Il est également possible d’itérer sur un générateur à l’aide d’une boucle for : celle-ci appelle automatiquement next() jusqu’à l’épuisement du générateur.
1234567def count_up(start, stop): while start <= stop: yield start start += 1 for value in count_up(1, 5): print(value) # 1, 2, 3, 4, 5
Lorsqu'un générateur est épuisé (plus aucune valeur à produire), appeler next() dessus déclenche une erreur StopIteration. Une boucle for gère cela automatiquement.
Glissez pour commencer à coder
Implémenter une fonction génératrice even_numbers qui produit les nombres pairs dans une plage donnée.
- Définir une fonction génératrice
even_numbersprenant deux paramètres :startetstop. - Utiliser une boucle
whilepour itérer tant questartest inférieur ou égal àstop. - Utiliser
yieldpour retournerstartuniquement s'il est pair (divisible par 2). - Incrémenter
startde 1 après chaque itération. - Utiliser une boucle
forpour afficher toutes les valeurs générées.
Solution
Merci pour vos commentaires !
single
Demandez à l'IA
Demandez à l'IA
Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion