Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Introduction aux Générateurs | Itérateurs et Générateurs
Concepts Avancés de Python

book
Introduction aux Générateurs

Les générateurs simplifient l'évaluation paresseuse en fournissant 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 à la fois. Les générateurs maintiennent automatiquement leur état entre les appels, les rendant plus intuitifs et efficaces pour de nombreux cas d'utilisation.

Un générateur est un type spécial de fonction qui :

  1. Utilise le mot-clé yield au lieu de return ;
  2. Met en pause l'exécution et conserve son état lorsque yield est appelé ;
  3. Reprend l'exécution là où elle s'était arrêtée lorsque le générateur est appelé à nouveau.
def 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
123456789
def 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
copy
import 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}")
12345678910
import 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}")
copy

Différences entre Itérateur et Générateur

Tâche

Swipe to start coding

Dans la tâche précédente, vous avez implémenté un lanceur de dés infini en utilisant une classe d'itérateur personnalisée. Maintenant, vous allez simplifier la même 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 en utilisant le mot-clé yield.

  1. Définissez la fonction génératrice. Utilisez le mot-clé yield dans la fonction dice_roller pour produire des lancers de dés aléatoires entre 1 et 6. Utilisez la fonction random.randint() pour simuler chaque lancer.
  2. Appelez la fonction dice_roller() pour créer un objet générateur et assignez-le à la variable dice_generator.
  3. Utilisez une boucle for avec enumerate() pour itérer sur le générateur. Arrêtez l'itération après 10 lancers en utilisant une condition if et l'instruction break.

Solution

import random

def dice_roller():
while True:
yield random.randint(1, 6)

# Step 1: Create a generator
dice_generator = dice_roller()

# Step 2: Roll the die using the generator
for i, roll in enumerate(dice_generator):
if i >= 10: # Stop after 10 rolls
break
print(f"Rolled: {roll}")

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 6. Chapitre 4
import random

def dice_roller():
___ ___:
___ random.randint(1, 6)

# Step 1: Create a generator
dice_generator = ___()

# Step 2: Roll the die using the generator
for i, roll in ___(___):
if i >= 10: # Stop after 10 rolls
break
print(f"Rolled: {roll}")
toggle bottom row
some-alt