Iteráveis do Python

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ção next() para obter o próximo elemento do objeto iterável.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *