Python iter ()

A função iter () do Python retorna um iterador para o objeto fornecido.

A iter()função cria um objeto que pode ser iterado um elemento por vez.

Esses objetos são úteis quando acoplados a loops como for loop, while loop.

A sintaxe da iter()função é:

 iter (objeto, sentinela)

Parâmetros iter ()

A iter()função tem dois parâmetros:

  • objeto - objeto cujo iterador deve ser criado (podem ser conjuntos, tuplas, etc.)
  • sentinela (opcional) - valor especial que é usado para representar o final de uma sequência

Valor de retorno do iter ()

  • A iter()função retorna um objeto iterador para o objeto fornecido.
  • Se o objeto definido pelo usuário não implementar __iter__(), e __next__()ou __getitem()__, a TypeErrorexceção será gerada.
  • Se o parâmetro sentinela também for fornecido, iter()retorna um iterador até que o caractere sentinela não seja encontrado.

Exemplo 1: Trabalho com Python iter ()

 # list of vowels vowels = ('a', 'e', 'i', 'o', 'u') vowels_iter = iter(vowels) print(next(vowels_iter)) # 'a' print(next(vowels_iter)) # 'e' print(next(vowels_iter)) # 'i' print(next(vowels_iter)) # 'o' print(next(vowels_iter)) # 'u'

Resultado

 aeiou 

Exemplo 2: iter () para objetos personalizados

 class PrintNumber: def __init__(self, max): self.max = max def __iter__(self): self.num = 0 return self def __next__(self): if(self.num>= self.max): raise StopIteration self.num += 1 return self.num print_num = PrintNumber(3) print_num_iter = iter(print_num) print(next(print_num_iter)) # 1 print(next(print_num_iter)) # 2 print(next(print_num_iter)) # 3 # raises StopIteration print(next(print_num_iter))

Resultado

 1 2 3 Traceback (última chamada mais recente): Arquivo "", linha 23, em Arquivo "", linha 11, em __next__ StopIteration 

Exemplo 3: iter () com parâmetro sentinel

 class DoubleIt: def __init__(self): self.start = 1 def __iter__(self): return self def __next__(self): self.start *= 2 return self.start __call__ = __next__ my_iter = iter(DoubleIt(), 16) for x in my_iter: print(x) 

Resultado

 2 4 8

Aqui, implementamos um objeto iterável personalizado sem uma StopIterationcondição.

No entanto, podemos usar o iter()método com o sentinelparâmetro para parar a iteração. Se o valor retornado de __next__()for igual a sentinel, StopIterationserá aumentado, caso contrário, o valor será retornado.

Leitura recomendada: Iteradores Python

Artigos interessantes...