Iterador do Python
- Página Anterior Herança do Python
- Próxima Página Escopo do Python
Iterador do Python
O iterador é um objeto que contém um número contável de valores.
O iterador é um objeto iterável, o que significa que você pode percorrer todos os valores.
Técnicamente, no Python, o iterador é um objeto que implementa o protocolo de iterador, que contém métodos __iter__()
e __next__()
.
Iterador VS Objeto Iterável (Iterable)
listas, tuplas, dicionários e conjuntos são objetos iteráveis. Eles são contêineres iteráveis, a partir dos quais você pode obter iteradores (Iterator).
Todos esses objetos têm métodos para obter iteradores iter()
Método:
Exemplo
Retornar um iterador do tupla e imprimir cada valor:
mytuple = ("apple", "banana", "cherry") myit = iter(mytuple) print(next(myit)) print(next(myit)) print(next(myit))
Até mesmo as strings são objetos iteráveis e podem retornar iteradores:
Exemplo
As strings também são objetos iteráveis, contendo uma série 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))
Percorrer iterador
Também podemos usar um loop for para percorrer objetos iteráveis:
Exemplo
Iterar sobre os valores do tupla:
mytuple = ("apple", "banana", "cherry") for x in mytuple: print(x)
Exemplo
Iterar sobre os caracteres da string:
mystr = "banana" for x in mystr: print(x)
Dica:O loop for cria um objeto iterador e executa next()
método.
criar iterador
Para criar um objeto/classe como iterador, é necessário implementar o método __iter__()
e __next__()
método.
Como você aprendeu no capítulo de classes/objetos do Python, todas as classes têm um método chamado __init__()
A função, que permite inicializar algumas coisas ao criar o objeto.
__iter__()
O método tem uma função semelhante, você pode executar operações (inicialização, etc.) mas deve sempre retornar o objeto do iterador.
__next__()
O método também permite que você execute operações e deve retornar o próximo item da sequência.
Exemplo
Criar um iterador que retorna números, começando em 1 e aumentando 1 em cada sequência (retorna 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
Se você tiver next()
instrução, ou no loop for, o exemplo acima continuaria para sempre.
Para evitar que a iteração continue para sempre, podemos usar StopIteration
instrução.
em __next__()
Dentro de um método, se a iteração for completada o número especificado de vezes, podemos adicionar uma condição de parada para lançar um erro:
Exemplo
Parar após 20 iterações:
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 Herança do Python
- Próxima Página Escopo do Python