domingo, 29 de março de 2020

Iteradores em Python

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
lista = ['Abacaxi', 'Banana', 'Manga']
iterador = iter(lista)

print(next(iterador))
print(next(iterador))
print(next(iterador))
As strings também são objetos iteráveis.
Exemplo
string = 'Melão'
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)

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
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))
Nesse exemplo se usássemos um loop for nosso programa nunca teria fim. Para por um fim ao incremento podemos utilizar o StopIteration.
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)

0 comentários:

Postar um comentário