single
Generadores Infinitos
Desliza para mostrar el menú
Recuerda que yield pausa un generador y lo reanuda en la siguiente llamada a next(). Hasta ahora, los generadores que has visto tenían un punto de finalización claro. Pero los generadores se vuelven especialmente potentes cuando se combinan con un bucle infinito, produciendo valores indefinidamente sin almacenarlos nunca en memoria.
Generadores infinitos con while True
Usar un bucle while True dentro de un generador crea una secuencia infinita, algo que sería imposible de almacenar como una lista. El generador solo produce el siguiente valor cuando se llama a next():
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
No importa cuántas veces llames a next(), el generador siempre tendrá un nuevo valor listo: nunca se adelanta ni almacena valores en memoria.
Control de un generador infinito
Dado que el generador se ejecuta indefinidamente, es necesario controlar cuántos valores se obtienen. La forma más común es utilizando un bucle for con 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
Nunca iterar sobre un generador infinito con un bucle for simple sin una condición de parada; se ejecutará indefinidamente y puede bloquear el programa.
Desliza para comenzar a programar
Generación de IDs de usuario únicos utilizando una función generadora infinita. La función id_generator() debe producir continuamente identificadores como "ID_1", "ID_2", etc.
- Inicializar la variable
countcon el valor 1, ya que los identificadores comienzan desde 1. - Utilizar un bucle
whileinfinito para generar identificadores de forma continua. - Utilizar
yieldpara devolver el identificador actual en el formatof"ID_{count}". - Incrementar
counten 1 después de cada iteración. - Inicializar el objeto generador
id_genllamando aid_generator().
Solución
¡Gracias por tus comentarios!
single
Pregunte a AI
Pregunte a AI
Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla