</lingo>

Dominando Iterable e Iterator em Python: Um Guia Completo de Iterable-vs-Iterator-Python

technical
Avançado

Entender a diferença entre Iterable e Iterator é crucial para qualquer programador Python que deseja aprimorar suas habilidades em iteração e otimização de código. Este guia completo visa esclarecer esses conceitos fundamentais e demonstrar sua aplicabilidade prática.

Entender a diferença entre Iterable e Iterator é crucial para qualquer programador Python que deseja aprimorar suas habilidades em iteração e otimização de código. Este guia completo visa esclarecer esses conceitos fundamentais e demonstrar sua aplicabilidade prática.

O que é um Iterable em Python?

Um Iterable é um objeto que pode ser iterado, ou seja, seus itens podem ser acessados sequencialmente. Em Python, qualquer objeto que implemente o método

__iter__
ou
__getitem__
pode ser considerado Iterable. Exemplos incluem listas, tuplas, dicionários, strings e arquivos. Iterables não guardam um estado de iteração e, em geral, não é possível iterar sobre eles mais de uma vez sem recriar o objeto Iterable.

Exemplo de Iterable

python

my_list = [10, 20, 30] for item in my_list: print(item)

O que é um Iterator em Python?

Um Iterator é um objeto que representa uma sequência de acesso a elementos de um Iterable. Ele guarda o estado atual da iteração e pode ser utilizado para acessar os elementos sequencialmente. Para ser um Iterator, o objeto deve implementar os métodos

__iter__
(para retornar o próprio objeto) e
__next__
(para acessar os próximos elementos da sequência). Quando não há mais itens para retornar, o método
__next__
levanta a exceção
StopIteration
.

Criando um Iterator

python

my_iterator = iter(my_list) print(next(my_iterator)) # Saída: 10 print(next(my_iterator)) # Saída: 20

Diferença chave entre Iterable e Iterator

A principal diferença entre Iterable e Iterator em Python é que um Iterable não guarda o estado da iteração e só pode ser percorrido uma vez (a menos que seja re-instantâneo), enquanto um Iterator guarda o estado atual da iteração e permite o acesso sequencial múltiplo aos elementos. Iterators são usados internamente em loops

for
e compreensões de listas, tornando-os componentes essenciais da iteração em Python.

Por que aprender Iterable-vs-Iterator-Python é importante?

Entender a diferença entre Iterable e Iterator é essencial para dominar a iteração em Python, o que é amplamente utilizado em programação funcional, otimização de desempenho de código e criação de estruturas de dados personalizadas. Além disso, essa compreensão permite a criação de código mais limpo, eficiente e pythonico.

Caso de Uso Prático

python

class ReverseIterator: def init(self, collection): self.collection = collection self.index = len(self.collection)

def __iter__(self):
    return self

def __next__(self):
    if self.index == 0:
        raise StopIteration
    self.index = self.index - 1
    return self.collection[self.index]

for item in ReverseIterator([1, 2, 3]): print(item) # Saída: 3, 2, 1

FAQ

Q: O que é um Iterable? R: Um Iterable é qualquer objeto que pode ser iterado, como listas, tuplas e dicionários, que implementam o método

__iter__
ou
__getitem__
.

Q: O que distingue um Iterator de um Iterable? R: Enquanto um Iterable define um objeto que pode ser percorrido, um Iterator é o objeto que efetivamente realiza a iteração, guardando o estado da iteração e implementando

__iter__
e
__next__
.

Q: Como posso criar um Iterator personalizado em Python? R: Para criar um Iterator personalizado, você deve definir uma classe com métodos

__iter__
(que retorna o objeto Iterator) e
__next__
(que retorna o próximo elemento e levanta
StopIteration
quando necessário).

References

Exemplos de código em iterable vs iterator python

python
my_list = [10, 20, 30]
for item in my_list:
    print(item)
Exemplo ilustrativo de iteração sobre um Iterable.
python
class ReverseIterator:
    def __init__(self, collection):
        self.collection = collection
        self.index = len(self.collection)

    def __iter__(self):
        return self

    def __next__(self):
        if self.index == 0:
            raise StopIteration
        self.index -= 1
        return self.collection[self.index]
Exemplo de um Iterator personalizado que itera sobre uma coleção em ordem reversa.

❓ Perguntas Frequentes

O que é um Iterable?

Um Iterable é qualquer objeto que pode ser iterado, como listas, tuplas e dicionários, que implementam o método

__iter__
ou
__getitem__
.

O que distingue um Iterator de um Iterable?

Enquanto um Iterable define um objeto que pode ser percorrido, um Iterator é o objeto que efetivamente realiza a iteração, guardando o estado da iteração e implementando

__iter__
e
__next__
.

Como posso criar um Iterator personalizado em Python?

Para criar um Iterator personalizado, você deve definir uma classe com métodos

__iter__
(que retorna o objeto Iterator) e
__next__
(que retorna o próximo elemento e levanta
StopIteration
quando necessário).

Referências

  • [1]
    Documentação Oficial da Python - https://docs.python.org/3/tutorial/classes.html#iterators
  • [2]
    Real Python - Iterators and Generators - https://realpython.com/python3-generators/
  • [3]
    Python Wiki - Iterator HOWTO - https://wiki.python.org/moin/Python HOWTO/Iteration

📂 Termos relacionados

Este termo foi útil para você?