Trabajar con iteradores y generadores en Python permite manejar grandes cantidades de datos de manera eficiente, sin necesidad de cargar todo en memoria.
¿Qué es un iterador y cómo se usa?
Un iterador en Python es un objeto que permite recorrer todos los elementos de una colección, uno a la vez, sin necesidad de usar índices. Para crear un iterador, se utiliza la función iter() y para obtener el siguiente elemento, se usa la función next(). Veamos un ejemplo:
# Crear una listalista =[1,2,3,4]# Obtener el iterador de la listaiterador =iter(lista)# Usar el iterador para obtener elementosprint(next(iterador))# Imprime: 1print(next(iterador))# Imprime: 2print(next(iterador))# Imprime: 3print(next(iterador))# Imprime: 4# Intentar obtener otro elemento después de finalizar la iteraciónprint(next(iterador))# Esto generará una excepción StopIteration
Los iteradores también pueden recorrer cadenas de texto:
# Crear una cadenatexto ="hola mundo"# Obtener el iterador de la cadenaiterador_texto =iter(texto)# Iterar a través de la cadenafor caracter in iterador_texto:print(caracter)
¿Cómo crear un iterador con range para números impares?
La función range se puede usar para crear un iterador que recorra números impares:
# Crear un iterador para números impares hasta 10limite =10iterador_impares =iter(range(1, limite +1,2))# Iterar a través de los números imparesfor numero in iterador_impares:print(numero)
Para cambiar a números pares, solo se debe modificar el inicio del rango:
# Crear un iterador para números pares hasta 10iterador_pares =iter(range(0, limite +1,2))# Iterar a través de los números paresfor numero in iterador_pares:print(numero)
¿Qué es un generador y cómo se utiliza?
Un generador es una función que produce una secuencia de valores sobre los cuales se puede iterar, usando la palabra clave yield en lugar de return. Aquí hay un ejemplo básico:
defmi_generador():yield1yield2yield3# Usar el generadorfor valor in mi_generador():print(valor)
¿Cómo crear un generador para la serie de Fibonacci?
La serie de Fibonacci es una secuencia donde cada número es la suma de los dos anteriores. Podemos crear un generador para producir esta serie:
deffibonacci(limite): a, b =0,1while a < limite:yield a
a, b = b, a + b
# Usar el generador para la serie de Fibonacci hasta 10for numero in fibonacci(10):print(numero)