Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Générateurs Infinis | Function Return Value Specification
Tutoriel sur les Fonctions Python
Section 4. Chapitre 5
single

single

Générateurs Infinis

Glissez pour afficher le menu

Rappel : yield met en pause un générateur et le reprend lors du prochain appel à next(). Jusqu'à présent, les générateurs que vous avez vus avaient un point d'arrêt clair. Mais les générateurs deviennent particulièrement puissants lorsqu'ils sont combinés à une boucle infinie – produisant des valeurs indéfiniment sans jamais les stocker en mémoire.

Générateurs infinis avec while True

L'utilisation d'une boucle while True à l'intérieur d'un générateur crée une séquence infinie – ce qui serait impossible à stocker dans une liste. Le générateur ne produit la valeur suivante que lorsque next() est appelé :

1234567891011
def counter(): count = 1 while True: # Runs forever yield count # Return current value and pause count += 1 # Resume from here on the next call gen = counter() print(next(gen)) # 1 print(next(gen)) # 2 print(next(gen)) # 3

Peu importe le nombre de fois que vous appelez next(), le générateur aura toujours une nouvelle valeur prête – il ne prend jamais d'avance et ne stocke pas de valeurs en mémoire.

Contrôle d’un générateur infini

Puisque le générateur fonctionne indéfiniment, il est nécessaire de contrôler le nombre de valeurs récupérées. La méthode la plus courante consiste à utiliser une boucle for avec range() :

12345678910
def counter(): count = 1 while True: yield count count += 1 gen = counter() for _ in range(5): print(next(gen)) # 1, 2, 3, 4, 5
Note
Remarque

Ne jamais itérer sur un générateur infini avec une simple boucle for sans condition d'arrêt – cela s'exécutera indéfiniment et fera planter votre programme.

Tâche

Glissez pour commencer à coder

Génération d'identifiants utilisateur uniques à l'aide d'une fonction génératrice infinie. La fonction id_generator() doit produire en continu des identifiants tels que "ID_1", "ID_2", etc.

  1. Initialisation de la variable count avec la valeur 1, car les identifiants commencent à 1.
  2. Utilisation d'une boucle while infinie pour générer continuellement des identifiants.
  3. Utilisation de yield pour retourner l'identifiant courant au format f"ID_{count}".
  4. Incrémentation de count de 1 après chaque itération.
  5. Initialisation de l'objet générateur id_gen en appelant id_generator().

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 4. Chapitre 5
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

some-alt