Introduction aux Générateurs : Production de Valeurs pour une Itération Efficace
Les générateurs simplifient l'évaluation paresseuse en offrant un moyen concis et lisible de créer des itérateurs. Alors qu'un itérateur est implémenté comme une classe avec les méthodes __iter__() et __next__(), un générateur est implémenté comme une fonction qui utilise le mot-clé yield pour produire des valeurs une à une. Les générateurs conservent automatiquement leur état entre les appels, ce qui les rend plus intuitifs et efficaces pour de nombreux cas d'utilisation.
Un générateur est un type particulier de fonction qui :
- Utilise le mot-clé
yieldau lieu dereturn; - Met en pause l'exécution et conserve son état lorsque yield est appelé ;
- Reprend l'exécution là où elle s'était arrêtée lorsque le générateur est appelé de nouveau.
123456789def example_generator(): yield "First value" yield "Second value" yield "Third value" gen = example_generator() print(next(gen)) # Output: First value print(next(gen)) # Output: Second value print(next(gen)) # Output: Third value
12345678910import random def limited_dice_roller(num_rolls): for _ in range(num_rolls): yield random.randint(1, 6) # Using the limited dice roller print("Rolling the dice:") for roll in limited_dice_roller(5): print(f"Rolled: {roll}")
Différences entre itérateur et générateur
Swipe to start coding
Dans la tâche précédente, vous avez implémenté un lanceur de dés infini à l'aide d'une classe d'itérateur personnalisée. À présent, vous allez simplifier cette fonctionnalité en utilisant une fonction génératrice. Les générateurs offrent un moyen concis et lisible de produire des valeurs de manière paresseuse grâce au mot-clé yield.
- Définir la fonction génératrice. Utilisez le mot-clé yield dans la fonction
dice_rollerpour produire des lancers de dés aléatoires entre1et6. Utilisez la fonctionrandom.randint()pour simuler chaque lancer. - Appelez la fonction
dice_roller()pour créer un objet générateur et assignez-le à la variabledice_generator. - Utilisez une boucle
foravecenumerate()pour itérer sur le générateur. Arrêtez l'itération après10lancers à l'aide d'une conditionifet de l'instructionbreak.
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
What are some practical use cases for generators?
Can you explain how to convert an iterator to a generator?
Are there any limitations or drawbacks to using generators?
Awesome!
Completion rate improved to 3.13
Introduction aux Générateurs : Production de Valeurs pour une Itération Efficace
Glissez pour afficher le menu
Les générateurs simplifient l'évaluation paresseuse en offrant un moyen concis et lisible de créer des itérateurs. Alors qu'un itérateur est implémenté comme une classe avec les méthodes __iter__() et __next__(), un générateur est implémenté comme une fonction qui utilise le mot-clé yield pour produire des valeurs une à une. Les générateurs conservent automatiquement leur état entre les appels, ce qui les rend plus intuitifs et efficaces pour de nombreux cas d'utilisation.
Un générateur est un type particulier de fonction qui :
- Utilise le mot-clé
yieldau lieu dereturn; - Met en pause l'exécution et conserve son état lorsque yield est appelé ;
- Reprend l'exécution là où elle s'était arrêtée lorsque le générateur est appelé de nouveau.
123456789def example_generator(): yield "First value" yield "Second value" yield "Third value" gen = example_generator() print(next(gen)) # Output: First value print(next(gen)) # Output: Second value print(next(gen)) # Output: Third value
12345678910import random def limited_dice_roller(num_rolls): for _ in range(num_rolls): yield random.randint(1, 6) # Using the limited dice roller print("Rolling the dice:") for roll in limited_dice_roller(5): print(f"Rolled: {roll}")
Différences entre itérateur et générateur
Swipe to start coding
Dans la tâche précédente, vous avez implémenté un lanceur de dés infini à l'aide d'une classe d'itérateur personnalisée. À présent, vous allez simplifier cette fonctionnalité en utilisant une fonction génératrice. Les générateurs offrent un moyen concis et lisible de produire des valeurs de manière paresseuse grâce au mot-clé yield.
- Définir la fonction génératrice. Utilisez le mot-clé yield dans la fonction
dice_rollerpour produire des lancers de dés aléatoires entre1et6. Utilisez la fonctionrandom.randint()pour simuler chaque lancer. - Appelez la fonction
dice_roller()pour créer un objet générateur et assignez-le à la variabledice_generator. - Utilisez une boucle
foravecenumerate()pour itérer sur le générateur. Arrêtez l'itération après10lancers à l'aide d'une conditionifet de l'instructionbreak.
Solution
Merci pour vos commentaires !
single