Resumo: neste tutorial, você aprenderá sobre iteráveis e iteradores do Python.
Introdução aos iteráveis do Python
Em Python, um iterável é um objeto que inclui zero, um ou muitos elementos. Um iterável tem a capacidade de retornar seus elementos um por vez.
Devido a esse recurso, você pode usar um loop for
para iterar sobre um iterável.
Na verdade, a função range()
é iterável porque você pode iterar sobre seu resultado:
for index in range(3):
print(index)
Saída:
0
1
2
Além disso, uma string é iterável porque você pode usar um loop for para iterar sobre ela:
str = 'Iterables'
for ch in str:
print(ch)
Listas e tuplas também são iteráveis porque você pode fazer um loop sobre elas. Por exemplo:
ranks = ['high', 'medium', 'low']
for rank in ranks:
print(rank)
A regra geral é que, se você souber se pode repetir algo, é iterável.
O que é um iterador
Um iterável pode ser iterado. E um iterador é o agente que executa a iteração.
Para obter um iterador de um iterável, você usa a função iter()
. Por exemplo:
colors = ['red', 'green', 'blue']
colors_iter = iter(colors)
Depois de ter o iterador, você pode obter o próximo elemento do iterável usando a função next()
:
colors = ['red', 'green', 'blue']
colors_iter = iter(colors)
color = next(colors_iter)
print(color)
Saída:
red
Toda vez que você chama a função next()
, ela retorna o próximo elemento do iterável. Por exemplo:
colors = ['red', 'green', 'blue']
colors_iter = iter(colors)
color = next(colors_iter)
print(color)
color = next(colors_iter)
print(color)
color = next(colors_iter)
print(color)
Saída:
red
green
blue
Se não houver mais nenhum elemento e você chamar a função next()
, receberá uma exceção.
colors = ['red', 'green', 'blue']
colors_iter = iter(colors)
color = next(colors_iter)
print(color)
color = next(colors_iter)
print(color)
color = next(colors_iter)
print(color)
# cause an excpetion
color = next(colors_iter)
print(color)
Este exemplo mostra primeiro três elementos da lista de cores e, em seguida, emite uma exceção:
red
green
blue
Traceback (most recent call last):
File "iterable.py", line 15, in <module>
color = next(colors_iter)
StopIteration
O iterador é stateful. Isso significa que, uma vez que você consome um elemento do iterador, ele desaparece.
Em outras palavras, depois de concluir o loop em um iterador, o iterador fica vazio. Se você iterar novamente, não retornará nada.
Como você pode iterar sobre um iterador, o iterador também é um objeto iterável. Isso é bastante confuso. Por exemplo:
colors = ['red', 'green', 'blue']
iterator = iter(colors)
for color in iterator:
print(color)
Saída:
red
green
blue
Se você chamar a função iter()
e passar um iterador para ela, ela retornará o mesmo iterador.
Posteriormente, você aprenderá como criar iteráveis.
Resumo
- Um iterável é um objeto que pode ser iterado. Um iterável tem a capacidade de retornar um de seus elementos por vez.
- Um iterador é um agente que executa a iteração. É com estado. E um iterador também é um objeto iterável.
- Use a função
iter()
para obter um iterador de um objeto iterável e a funçãonext()
para obter o próximo elemento do objeto iterável.