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é :
1234567891011def 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() :
12345678910def counter(): count = 1 while True: yield count count += 1 gen = counter() for _ in range(5): print(next(gen)) # 1, 2, 3, 4, 5
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.
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.
- Initialisation de la variable
countavec la valeur 1, car les identifiants commencent à 1. - Utilisation d'une boucle
whileinfinie pour générer continuellement des identifiants. - Utilisation de
yieldpour retourner l'identifiant courant au formatf"ID_{count}". - Incrémentation de
countde 1 après chaque itération. - Initialisation de l'objet générateur
id_genen appelantid_generator().
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