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

Contenu du cours

Concepts Avancés de Python

Concepts Avancés de Python

1. Modules et Imports
2. Gestion des Erreurs
3. Gestion des Fichiers
4. Cadre Pytest
5. Cadre Unittest
6. Itérateurs et Générateurs

book
Comprendre les Itérateurs

Qu'est-ce qu'un itérateur ?

Techniquement, en Python, un itérateur est un objet qui implémente le protocole d'itération, qui 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, il lève une exception StopIteration 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) un à la fois tout en gardant une trace de sa position.

Remarque

Un itérateur est aussi un itérable parce qu'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 pas un itérateur. Lorsque vous la passez à la fonction iter(), vous obtenez un itérateur qui permet un parcours élément par élément.

Construire un itérateur personnalisé

Cet itérateur génère un nombre fixe de lancers de dés aléatoires et s'arrête une fois que tous les lancers sont terminé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 de l'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, un nouvel itérateur doit être créé.

Tâche

Swipe to start coding

Complétez les parties manquantes du code pour implémenter une classe d'itérateur personnalisée pour simuler 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 un 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é paresseusement. Arrêtez après 10 lancers en utilisant une condition if et 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
toggle bottom row

book
Comprendre les Itérateurs

Qu'est-ce qu'un itérateur ?

Techniquement, en Python, un itérateur est un objet qui implémente le protocole d'itération, qui 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, il lève une exception StopIteration 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) un à la fois tout en gardant une trace de sa position.

Remarque

Un itérateur est aussi un itérable parce qu'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 pas un itérateur. Lorsque vous la passez à la fonction iter(), vous obtenez un itérateur qui permet un parcours élément par élément.

Construire un itérateur personnalisé

Cet itérateur génère un nombre fixe de lancers de dés aléatoires et s'arrête une fois que tous les lancers sont terminé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 de l'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, un nouvel itérateur doit être créé.

Tâche

Swipe to start coding

Complétez les parties manquantes du code pour implémenter une classe d'itérateur personnalisée pour simuler 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 un 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é paresseusement. Arrêtez après 10 lancers en utilisant une condition if et 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
Switch to desktopPassez à un bureau pour une pratique réelleContinuez d'où vous êtes en utilisant l'une des options ci-dessous
We're sorry to hear that something went wrong. What happened?
some-alt