Definició: En Python, un iterador és un objecte que permet recórrer una seqüència d’elements d’un en un. Cada vegada que s’aplica la funció next(), l’iterador retorna el següent element. Quan no en queden més, llença l’excepció StopIteration.
Iterador vs. Iterable
- Iterable: objecte que pot proporcionar un iterador amb
iter()(per exemple,list,tuple,set,dict). - Iterador: objecte retornat per
iter()i consumit pernext().
fruits = ["poma", "plàtan", "cirera"]
# obtenim un iterador
it = iter(fruits)
print(next(it)) # poma
print(next(it)) # plàtan
print(next(it)) # cirera
print(next(it)) # StopIteration (quan s'acaben els elements)
Característiques principals
- Els iteradors recorden la posició actual dins de la seqüència.
- Només es poden recórrer una vegada; un cop consumits, cal crear-ne un de nou.
- Són ideals per treballar amb grans conjunts de dades o fluxos infinits (gràcies a la generació sota demanda).
Com crear un iterador propi
Pots crear una classe que implementi els mètodes especials __iter__() i __next__():
class Comptador:
def __init__(self, limit):
self.limit = limit
self.count = 0
def __iter__(self):
return self
def __next__(self):
if self.count < self.limit:
self.count += 1
return self.count
else:
raise StopIteration
for num in Comptador(3):
print(num)
# 1, 2, 3
Relació amb generadors
Els generadors són una manera senzilla de crear iteradors utilitzant la paraula clau yield:
def comptar(limit):
for i in range(1, limit + 1):
yield i
for n in comptar(3):
print(n)
Errors comuns i bones pràctiques
- Consum accidental: un iterador no es pot “reiniciar”; crea’n un de nou amb
iter()si cal tornar a començar. - Excepció StopIteration: indica que s’han acabat els elements, no és un error real.
- Iteració segura: els bucles
forgestionen automàticamentStopIteration.
Vegeu també
- Iterable (Python): objecte capaç de proporcionar un iterador amb
iter(). - Generador (Python): funció que crea iteradors de forma més simple amb
yield. - Conjunt (
set): estructura iterable que pot convertir-se en iterador.