single
Funciones Generadoras
Desliza para mostrar el menú
Una función generadora es un tipo especial de función que utiliza la palabra clave yield en lugar de return para generar una secuencia de valores. Cuando se llama a una función generadora, devuelve un objeto iterador, que puede ser recorrido para obtener los valores uno a uno.
Un objeto iterador es un objeto que implementa el protocolo de iterador definiendo los métodos __iter__() y __next__(). Esto permite recuperar elementos uno a uno con next(), haciendo posible recorrer elementos en secuencias o funciones generadoras.
La principal ventaja de las funciones generadoras es su eficiencia de memoria. En lugar de generar toda la secuencia de antemano y almacenarla en memoria, los generadores producen los valores en el momento según se necesitan.
Cómo funciona yield
A diferencia de return, que sale completamente de la función, yield pausa la función y guarda su estado. La próxima vez que se llama a next(), el generador se reanuda exactamente desde donde se detuvo:
12345678910def count_up(start, stop): while start <= stop: yield start # Pause and return the current value start += 1 # Resume from here on the next call counter = count_up(1, 3) print(next(counter)) # 1 print(next(counter)) # 2 print(next(counter)) # 3
También se puede iterar sobre un generador usando un bucle for; este llama automáticamente a next() hasta que el generador se agota:
1234567def count_up(start, stop): while start <= stop: yield start start += 1 for value in count_up(1, 5): print(value) # 1, 2, 3, 4, 5
Una vez que un generador se agota (no quedan más valores para producir), llamar a next() sobre él generará una excepción StopIteration. Un bucle for maneja esto automáticamente.
Desliza para comenzar a programar
Implementar una función generadora even_numbers que produzca números pares en un rango dado.
- Definir una función generadora
even_numbersque reciba dos parámetros:startystop. - Utilizar un bucle
whilepara iterar mientrasstartsea menor o igual astop. - Utilizar
yieldpara devolverstartsolo si es par (divisible por 2). - Incrementar
starten 1 después de cada iteración. - Utilizar un bucle
forpara imprimir todos los valores generados.
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