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

bookCompréhension des Itérateurs en Python

Que sont les itérateurs ?

Techniquement, en Python, un itérateur est un objet qui implémente le protocole d'itérateur, lequel se compose des méthodes suivantes :

  • __iter__() : retourne l'objet itérateur lui-même, le rendant compatible avec les boucles comme for ;
  • __next__() : retourne l'élément suivant de la séquence. Lorsqu'il n'y a plus d'éléments, une exception StopIteration est levée pour signaler la fin du parcours.

Un itérateur permet de parcourir les éléments d'un itérable (par exemple, une liste ou une chaîne de caractères) un à un tout en gardant la trace de sa position.

iterator = iter(iterable)

Remarque

Un itérateur est également un itérable car il implémente la méthode __iter__().

Tous les itérables ne sont pas des itérateurs. Par exemple, une liste est itérable mais n'est pas un itérateur. Lorsque vous la transmettez à la fonction iter(), vous obtenez un itérateur qui permet un parcours élément par élément.

Créer un itérateur personnalisé

Cet itérateur génère un nombre fixe de lancers de dé aléatoires et s'arrête une fois tous les lancers effectués.

123456789101112131415161718192021222324252627
import random class FiniteDie: def __init__(self, num_rolls): """Initialize the iterator with a fixed number of rolls.""" self.num_rolls = num_rolls self.current_roll = 0 def __iter__(self): """Return the iterator object itself.""" return self def __next__(self): """Generate the next dice roll or stop iteration.""" if self.current_roll < self.num_rolls: self.current_roll += 1 return random.randint(1, 6) raise StopIteration # Using the FiniteDie iterator num_rolls = 5 die_iterator = FiniteDie(num_rolls) print(f"Rolling the die {num_rolls} times:") for roll in die_iterator: print(f"Rolled: {roll}")
copy

Épuisement d'un itérateur

Une fois qu'un itérateur est épuisé, il ne peut pas être réutilisé sans être recréé. Par exemple :

12345678910
numbers = [1, 2, 3, 4] iterator = iter(numbers) # First iteration for num in iterator: print(num) # Output: 1, 2, 3, 4 # Second iteration for num in iterator: print(num) # Output: Nothing, the iterator is exhausted.
copy

Les itérateurs ne peuvent être parcourus qu'une seule fois. Pour itérer à nouveau, il est nécessaire de créer un nouvel itérateur.

Tâche

Swipe to start coding

Complétez les parties manquantes du code pour implémenter une classe d'itérateur personnalisée simulant un lanceur de dé infini. L'itérateur doit générer paresseusement des lancers aléatoires d'un dé à six faces et s'arrêter après 10 lancers.

  1. La méthode __iter__() permet à un objet d'être utilisé comme itérateur.
  2. La méthode __next__() produit le prochain lancer de dé aléatoire (un nombre entre 1 et 6).
  3. Créez une instance de la classe InfiniteDie, qui représente le lanceur de dé.
  4. Utilisez une boucle for avec enumerate() pour lancer le dé de manière paresseuse. Arrêtez-vous après 10 lancers à l'aide d'une condition if et de l'instruction break.

Solution

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 6. Chapitre 2
single

single

Demandez à l'IA

expand

Demandez à l'IA

ChatGPT

Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion

Suggested prompts:

Can you explain the difference between an iterator and an iterable in more detail?

How can I create my own custom iterator for a different use case?

What happens if I try to use an exhausted iterator again?

close

Awesome!

Completion rate improved to 3.13

bookCompréhension des Itérateurs en Python

Glissez pour afficher le menu

Que sont les itérateurs ?

Techniquement, en Python, un itérateur est un objet qui implémente le protocole d'itérateur, lequel se compose des méthodes suivantes :

  • __iter__() : retourne l'objet itérateur lui-même, le rendant compatible avec les boucles comme for ;
  • __next__() : retourne l'élément suivant de la séquence. Lorsqu'il n'y a plus d'éléments, une exception StopIteration est levée pour signaler la fin du parcours.

Un itérateur permet de parcourir les éléments d'un itérable (par exemple, une liste ou une chaîne de caractères) un à un tout en gardant la trace de sa position.

iterator = iter(iterable)

Remarque

Un itérateur est également un itérable car il implémente la méthode __iter__().

Tous les itérables ne sont pas des itérateurs. Par exemple, une liste est itérable mais n'est pas un itérateur. Lorsque vous la transmettez à la fonction iter(), vous obtenez un itérateur qui permet un parcours élément par élément.

Créer un itérateur personnalisé

Cet itérateur génère un nombre fixe de lancers de dé aléatoires et s'arrête une fois tous les lancers effectués.

123456789101112131415161718192021222324252627
import random class FiniteDie: def __init__(self, num_rolls): """Initialize the iterator with a fixed number of rolls.""" self.num_rolls = num_rolls self.current_roll = 0 def __iter__(self): """Return the iterator object itself.""" return self def __next__(self): """Generate the next dice roll or stop iteration.""" if self.current_roll < self.num_rolls: self.current_roll += 1 return random.randint(1, 6) raise StopIteration # Using the FiniteDie iterator num_rolls = 5 die_iterator = FiniteDie(num_rolls) print(f"Rolling the die {num_rolls} times:") for roll in die_iterator: print(f"Rolled: {roll}")
copy

Épuisement d'un itérateur

Une fois qu'un itérateur est épuisé, il ne peut pas être réutilisé sans être recréé. Par exemple :

12345678910
numbers = [1, 2, 3, 4] iterator = iter(numbers) # First iteration for num in iterator: print(num) # Output: 1, 2, 3, 4 # Second iteration for num in iterator: print(num) # Output: Nothing, the iterator is exhausted.
copy

Les itérateurs ne peuvent être parcourus qu'une seule fois. Pour itérer à nouveau, il est nécessaire de créer un nouvel itérateur.

Tâche

Swipe to start coding

Complétez les parties manquantes du code pour implémenter une classe d'itérateur personnalisée simulant un lanceur de dé infini. L'itérateur doit générer paresseusement des lancers aléatoires d'un dé à six faces et s'arrêter après 10 lancers.

  1. La méthode __iter__() permet à un objet d'être utilisé comme itérateur.
  2. La méthode __next__() produit le prochain lancer de dé aléatoire (un nombre entre 1 et 6).
  3. Créez une instance de la classe InfiniteDie, qui représente le lanceur de dé.
  4. Utilisez une boucle for avec enumerate() pour lancer le dé de manière paresseuse. Arrêtez-vous après 10 lancers à l'aide d'une condition if et de l'instruction break.

Solution

Switch to desktopPassez à un bureau pour une pratique réelleContinuez d'où vous êtes en utilisant l'une des options ci-dessous
Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 6. Chapitre 2
single

single

some-alt