Resumo : neste tutorial, você aprenderá sobre o iterador Python e como definir um iterador personalizado usando o protocolo iterador.
O que é um iterador Python
Um iterador é um objeto que implementa:
__iter__
método que retorna o próprio objeto.__next__
método que retorna o próximo item. Se todos os itens foram retornados, o método gera umaStopIteration
exceção.
Observe que esses dois métodos também são conhecidos como protocolo iterador .
Python permite que você use iteradores em for
loops, compreensões e outras funções integradas, incluindo map
, filter
, reduce
e zip
.
Exemplo de iterador Python
Um número quadrado é um produto de um inteiro consigo mesmo. Por exemplo, um quadrado de 2 é 4 (=2*2).
O exemplo a seguir define Square
a classe iteradora que retorna os números quadrados.
class Square:
def __init__(self, length):
self.length = length
self.current = 0
def __iter__(self):
return self
def __next__(self):
if self.current >= self.length:
raise StopIteration
self.current += 1
return self.current ** 2
Linguagem de código: Python ( python )
Como funciona.
Primeiro, inicialize os atributos length
e current
no __init__
método.
O length
atributo especifica o número de números quadrados que a classe deve retornar. E o current
atributo acompanha o número inteiro atual.
Segundo, implemente o __iter__
método que retorna o self
objeto.
Terceiro, implemente o __next__
método que retorna o próximo número quadrado. Se o número de números quadrados retornados for maior que o comprimento, o método gera a exceção. __next__
StopIteration
Usando o objeto iterador
A seguir mostramos como usar o Square
iterador em um for
loop:
square = Square(5)
for sq in square:
print(sq)
Linguagem de código: Python ( python )
Saída:
1
4
9
16
25
Como funciona:
- Primeiro, crie uma nova instância da
Square
classe. - Em seguida, use o
for
loop para iterar os itens do iterador quadrado.
Depois de iterar todos os itens, o iterador se esgota. Isso significa que você precisa criar um novo iterador para iterar seus itens novamente.
Se você tentar usar o iterador que já está esgotado, receberá a exceção StopIteration. Por exemplo:
next(square)
Erro:
StopIteration
Linguagem de código: JavaScript ( javascript )
Além disso, um iterador não pode ser reiniciado porque ele possui apenas o __next__
método que retorna o próximo item de uma coleção.
Resumo
- Um iterador é um objeto que implementa
__iter__
métodos__next__
. - Um iterador não pode ser reutilizável depois que todos os itens forem retornados.