"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como trabalhar com iteradores e geradores em Python

Como trabalhar com iteradores e geradores em Python

Publicado em 2024-08-22
Navegar:627

How to Work with Iterators and Generators in Python

Em Python, iteradores e geradores são ferramentas poderosas para trabalhar com sequências de dados. Eles permitem iterar os dados sem precisar armazenar a sequência inteira na memória. Este blog irá explicar iteradores e geradores de uma forma simples e compreensível, com exemplos práticos.

1. O que é um Iterador?

Definição: Um iterador é um objeto em Python que permite percorrer todos os elementos de uma coleção (como uma lista ou uma tupla), um de cada vez. Segue o protocolo iterador, que inclui a implementação de dois métodos: __iter__() e __next__().

Como funcionam os iteradores:

  • __iter__(): Este método retorna o próprio objeto iterador.

  • __next__(): Este método retorna o próximo valor da coleção. Se não houver mais itens para retornar, a exceção StopIteration será gerada.

Exemplo de um iterador personalizado:

class MyIterator:
    def __init__(self, data):
        self.data = data
        self.index = 0

    def __iter__(self):
        return self

    def __next__(self):
        if self.index 



Saída:

1
2
3

Explicação: Neste exemplo, MyIterator é uma classe iteradora personalizada que itera em uma lista de números. O método __next__() retorna o próximo item da lista e gera StopIteration quando não há mais itens para retornar.

Iteradores padrão para coleções integradas

Python fornece iteradores padrão para coleções integradas, como listas, tuplas, dicionários e conjuntos. Você pode usar a função iter para obter um iterador dessas coleções e então usar next para iterar por elas.

Exemplo com uma lista:
my_list = [1, 2, 3]
my_iter = iter(my_list)

print(next(my_iter))  # Output: 1
print(next(my_iter))  # Output: 2
print(next(my_iter))  # Output: 3
# print(next(my_iter))  # This will raise StopIteration

2. O que é um gerador?

Definição: Um gerador é um tipo especial de iterador em Python, definido usando uma função e a palavra-chave yield. Os geradores permitem que você itere por uma sequência de valores sem armazená-los todos na memória de uma só vez, tornando-os mais eficientes em termos de memória do que listas.

Como funcionam os geradores:

  • rendimento: a palavra-chave rendimento é usada para produzir um valor e pausar a função, salvando seu estado. Quando o gerador é chamado novamente, ele retoma a execução de onde parou.

Exemplo:

def my_generator():
    yield 1
    yield 2
    yield 3

gen = my_generator()
for item in gen:
    print(item)

Saída:

1
2
3

Explicação: Neste exemplo, my_generator é uma função geradora que produz três valores, um por um. Cada chamada para yield produz um valor e pausa a função até que o próximo valor seja solicitado.

3. Benefícios do uso de geradores

Eficiência de memória: Os geradores geram valores dinamicamente e não armazenam a sequência inteira na memória, tornando-os ideais para trabalhar com grandes conjuntos de dados ou fluxos de dados.

Exemplo:

def large_sequence():
    for i in range(1, 1000001):
        yield i

gen = large_sequence()
print(next(gen))  # Output: 1
print(next(gen))  # Output: 2

Explicação: Este gerador produz uma sequência de um milhão de números sem armazená-los todos na memória, demonstrando sua eficiência de memória.

4. Casos de uso para iteradores e geradores

Iteradores:

  • Objetos iteráveis ​​personalizados: quando você precisa de mais controle sobre a lógica de iteração.

  • Sequências infinitas: geração de uma sequência infinita de valores, como dados de um sensor.

Geradores:

  • Avaliação preguiçosa: processamento de grandes conjuntos de dados, um item por vez.

  • Pipelines: criação de pipelines de processamento de dados que lidam com dados em streaming.

5. Expressões Geradoras

Definição: As expressões geradoras fornecem uma maneira concisa de criar geradores. Eles são semelhantes às compreensões de lista, mas usam parênteses em vez de colchetes.

Exemplo:

gen_exp = (x * x for x in range(5))
for value in gen_exp:
    print(value)

Saída:

0
1
4
9
16

Explicação: Esta expressão geradora cria um gerador que produz os quadrados dos números de 0 a 4.

6. Exemplos práticos e melhores práticas

Exemplo 1: leitura de arquivos grandes

def read_large_file(file_path):
    with open(file_path, 'r') as file:
        for line in file:
            yield line

for line in read_large_file('large_file.txt'):
    print(line.strip())

Explicação: Esta função geradora lê um arquivo grande linha por linha, produzindo uma linha por vez. É eficiente em termos de memória porque não carrega o arquivo inteiro na memória.

Exemplo 2: Sequência de Fibonacci

def fibonacci():
    a, b = 0, 1
    while True:
        yield a
        a, b = b, a   b

fib = fibonacci()
for _ in range(10):
    print(next(fib))

Saída:

0
1
1
2
3
5
8
13
21
34

Explicação: Esta função geradora produz uma sequência infinita de números de Fibonacci. Ele demonstra como geradores podem ser usados ​​para gerar sequências de valores potencialmente infinitas.

7. Perguntas e respostas da entrevista

  1. O que é um iterador em Python?
* An iterator is an object that allows you to traverse through all the elements of a collection one at a time, implementing the `__iter__()` and `__next__()` methods.
  1. O que é um gerador em Python?
* A generator is a special type of iterator defined using a function and the `yield` keyword, allowing you to generate values on the fly without storing them all in memory.
  1. Quais são os benefícios de usar geradores?
* Generators are memory-efficient, as they generate values on the fly. They are useful for processing large datasets, building data pipelines, and working with potentially infinite sequences.
  1. Como as expressões geradoras diferem das compreensões de lista?
* Generator expressions use parentheses and produce values one at a time, whereas list comprehensions use square brackets and generate the entire list in memory.
Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/tapstechie/how-to-work-with-iterators-and-generators-in-python-35k3?1 Se houver alguma violação, entre em contato com [email protected] para excluí-lo
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3