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()__
, aTypeError
exceçã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 StopIteration
condição.
No entanto, podemos usar o iter()
método com o sentinel
parâmetro para parar a iteração. Se o valor retornado de __next__()
for igual a sentinel
, StopIteration
será aumentado, caso contrário, o valor será retornado.
Leitura recomendada: Iteradores Python