Iterador de Python
- Página Anterior Herencia de Python
- Página Siguiente Alcance de Python
Iterador de Python
Un iterador es un objeto que contiene un número contable de valores.
Un iterador es un objeto iterable, lo que significa que puedes recorrer todos los valores.
Técnicamente, en Python, un iterador es un objeto que implementa el protocolo de iterador, que contiene métodos __iter__()
y __next__()
.
Iterador VS Objeto Iterable (Iterable)
Las listas, tuplas, diccionarios y conjuntos son objetos iterables. Son contenedores iterables de los que puedes obtener un iterador (Iterator).
Todos estos objetos tienen métodos para obtener iteradores iter()
Método:
Ejemplo
Devolver un iterador desde una tupla e imprimir cada valor:
mytuple = ("apple", "banana", "cherry") myit = iter(mytuple) print(next(myit)) print(next(myit)) print(next(myit))
Incluso las cadenas de caracteres son objetos iterables y pueden devolver un iterador:
Ejemplo
Las cadenas de caracteres también son objetos iterables que contienen una serie de caracteres:
mystr = "banana" myit = iter(mystr) print(next(myit)) print(next(myit)) print(next(myit)) print(next(myit)) print(next(myit)) print(next(myit))
Recorrer iterador
También podemos usar un bucle for para recorrer objetos iterables:
Ejemplo
Iterar sobre los valores de una tupla:
mytuple = ("apple", "banana", "cherry") for x in mytuple: print(x)
Ejemplo
Iterar sobre los caracteres de una cadena:
mystr = "banana" for x in mystr: print(x)
Consejo:El bucle for en realidad crea un objeto iterador y ejecuta para cada ejecución del bucle next()
método.
Crear iterador
Para crear un objeto/clase como iterador, es necesario implementar para el objeto __iter__()
y __next__()
método.
Como aprendiste en el capítulo de Clases/Objetos de Python, todas las clases tienen un método llamado __init__()
La función, que le permite realizar algunas inicializaciones al crear un objeto.
__iter__()
El método tiene un propósito similar, puede realizar operaciones (inicialización, etc.) pero debe devolver siempre el objeto iterador en sí.
__next__()
El método también le permite realizar operaciones y debe devolver el siguiente elemento de la secuencia.
Ejemplo
Crear un iterador que devuelva números, comenzando en 1 y aumentando 1 en cada secuencia (devuelve 1, 2, 3, 4, 5, etc.):
class MyNumbers: def __iter__(self): self.a = 1 return self def __next__(self): x = self.a self.a += 1 return x myclass = MyNumbers() myiter = iter(myclass) print(next(myiter)) print(next(myiter)) print(next(myiter)) print(next(myiter)) print(next(myiter))
StopIteration
Si tienes suficiente next()
instrucción, o en un bucle for, el ejemplo anterior continuará para siempre.
Para evitar que la iteración continúe para siempre, podemos usar StopIteration
instrucción.
en __next__()
En el método, si se completa el número especificado de iteraciones, podemos agregar una condición de terminación para lanzar un error:
Ejemplo
Detener después de 20 iteraciones:
class MyNumbers: def __iter__(self): self.a = 1 return self def __next__(self): if self.a <= 20: x = self.a self.a += 1 return x else: raise StopIteration myclass = MyNumbers() myiter = iter(myclass) for x in myiter: print(x)
- Página Anterior Herencia de Python
- Página Siguiente Alcance de Python