Iteradores em Python
Os iteradores em python são objetos que contêm n elementos. Com objetos que podem ser iterados é possível acessar cada elemento, do primeiro ao ultimo. Temos como exemplo de objetos que podem ser iterados as listas, as tuplas, os sets, etc. Todos os objetos que podem ser iterados fazem uso de dois métodos: __iter__() e __next__().
Os objetos que podem ser iterados são contêineres que tem um numero para cada elemento no objeto. Com esse numero é possível saber a posição do elemento no objeto. A função iter retorna o iterador de um objeto e a função next coloca mais um na contagem. Assim obtendo o endereço do próximo elemento do objeto.
Exemplo
As strings também são objetos iteráveis.
lista = ['Abacaxi', 'Banana', 'Manga']
iterador = iter(lista)
print(next(iterador))
print(next(iterador))
print(next(iterador))
iterador = iter(lista)
print(next(iterador))
print(next(iterador))
print(next(iterador))
Exemplo
string = 'Melão'
iterador = iter(string)
print(next(iterador))
print(next(iterador))
print(next(iterador))
print(next(iterador))
print(next(iterador))
iterador = iter(string)
print(next(iterador))
print(next(iterador))
print(next(iterador))
print(next(iterador))
print(next(iterador))
Loop for
O loop for como você já deve ter percebido, cria um objeto iterável e executa a função next.
Exemplo
string = 'Melão'
for i in string:
print(i)
for i in string:
print(i)
Criando uma classe/objeto iterável
Você também pode criar o seu objeto iterável. Para isso é preciso que essa nova classe tenha os métodos iter e next.
Exemplo
Nesse exemplo se usássemos um loop for nosso programa nunca teria fim. Para por um fim ao incremento podemos utilizar o StopIteration.
class ClassIterador:
def __iter__(self):
self.a = 1
return self
def __next__(self):
b = self.a
self.a += 1
return b
itrd = ClassIterador()
iterador = iter(itrd)
print(next(iterador))
print(next(iterador))
print(next(iterador))
def __iter__(self):
self.a = 1
return self
def __next__(self):
b = self.a
self.a += 1
return b
itrd = ClassIterador()
iterador = iter(itrd)
print(next(iterador))
print(next(iterador))
print(next(iterador))
Exemplo
class ClassIterador:
def __iter__(self):
self.a = 1
return self
def __next__(self):
if self.a <= 10:
b = self.a
self.a += 1
return b
else:
raise StopIteration
itrd = ClassIterador()
for i in itrd:
print(i)
def __iter__(self):
self.a = 1
return self
def __next__(self):
if self.a <= 10:
b = self.a
self.a += 1
return b
else:
raise StopIteration
itrd = ClassIterador()
for i in itrd:
print(i)
0 comentários:
Postar um comentário