Padrões avançados de geradores em Python

Encadeamento, pipelines e integração de corrotinas

Mergulhe em técnicas avançadas para usar geradores Python. Aprenda a construir pipelines de geradores, encadear geradores e integrá-los a corrotinas para um processamento de dados eficiente.

Programação
Autor
Afiliação
Data de Publicação

5 de fevereiro de 2024

Data de Modificação

29 de abril de 2025

Palavras-chave

Padrões avançados de geradores, pipelines de geradores, geradores em cadeia, Corrotinas e geradores, Tutorial de geradores Python

Padrões avançados de geradores em Python

Introdução

Bem-vindo ao tutorial Padrões avançados de geradores. Neste guia, exploramos técnicas sofisticadas que vão além dos conceitos básicos dos geradores Python. Você aprenderá como encadear geradores, construir pipelines de geradores para processamento sequencial de dados e integrá-los com corrotinas para fluxos de trabalho assíncronos. Essas técnicas podem ajudá-lo a otimizar o uso da memória e melhorar a eficiência de suas tarefas de processamento de dados.



Geradores em cadeia

O encadeamento de geradores permite passar dados de um gerador para o próximo de maneira contínua. Isso pode ser especialmente útil para construir pipelines de processamento modulares, nos quais cada gerador realiza uma transformação específica nos dados.

Exemplo: encadeamento de geradores

def read_numbers(n):
    """Yield numbers from 1 to n."""
    for i in range(1, n + 1):
        yield i

def square(numbers):
    """Yield the square of each number."""
    for number in numbers:
        yield number * number

def filter_even(squared_numbers):
    """Yield only even squared numbers."""
    for num in squared_numbers:
        if num % 2 == 0:
            yield num

# Encadeamento de geradores
numbers = read_numbers(10)
squared = square(numbers)
even_squares = filter_even(squared)

print("Even squares:", list(even_squares))

Pipelines de geradores

Um pipeline de geradores é uma sequência de geradores em que a saída de um serve como entrada para o próximo. Os pipelines são particularmente eficazes para processar fluxos de dados de maneira eficiente em termos de memória.

Auxílio visual: fluxograma do pipeline do gerador

flowchart LR
  A[Generate Numbers] --> B[Square Numbers]
  B --> C[Filter Even Numbers]
  C --> D[Output Results]

Integração de geradores com corrotinas

Corrotinas são funções especiais que podem suspender e retomar sua execução usando a palavra-chave await. Ao contrário das funções regulares, as corrotinas permitem escrever código assíncrono sem bloqueio. Ao integrar geradores com corrotinas, você pode lidar com fluxos de dados assíncronos e tarefas vinculadas a E/S de maneira eficiente.

O que são corrotinas?

Corrotinas são funções que pausam sua execução quando chegam a uma instrução await, permitindo que outras tarefas sejam executadas nesse intervalo. Isso os torna ideais para programação assíncrona, onde você precisa gerenciar várias tarefas vinculadas a E/S simultaneamente sem bloquear todo o programa.

Exemplo: gerador assíncrono

import asyncio

async def async_count(n):
    """An asynchronous generator that counts to n."""
    for i in range(1, n + 1):
        await asyncio.sleep(0.5)  # Simular E/S assíncrona
        yield i

async def process_async():
    async for number in async_count(5):
        print("Async Number:", number)

if __name__ == "__main__":
    asyncio.run(process_async())

Neste exemplo, o gerador assíncrono async_count produz valores com um atraso assíncrono, enquanto a corrotina process_async processa cada valor à medida que ele fica disponível.

Práticas recomendadas e armadilhas comuns

  • Design modular:
    Divida suas tarefas de processamento em pequenos geradores de finalidade única que podem ser facilmente encadeados.

  • Aproveitar a avaliação preguiçosa:
    Os geradores calculam valores em tempo real, o que ajuda a economizar memória ao processar grandes conjuntos de dados.

  • Tratamento de erros:
    Sempre inclua o tratamento de erros em seus pipelines de geradores para garantir uma execução robusta.

  • Mantenha a legibilidade:
    Como os pipelines de geradores e as integrações de corrotinas podem se tornar complexos, certifique-se de que seu código esteja bem documentado e fácil de seguir.

Dica

Comece com pipelines de geradores simples e introduza gradualmente elementos assíncronos. Essa abordagem facilita a depuração e a compreensão de cada componente do seu fluxo de trabalho.

Conclusão

Padrões avançados de geradores em Python abrem técnicas poderosas para processamento eficiente de dados e otimização de desempenho. Ao encadear geradores, criar pipelines robustos e integrar com corrotinas, você pode desenvolver código que é eficiente em termos de memória e altamente escalável. Experimente esses padrões para desbloquear novos níveis de eficiência em seus projetos Python.

Leitura adicional

Boa programação e aproveite para dominar o poder dos padrões avançados de geradores em Python!

Explore mais artigos

Nota

Aqui estão mais artigos da mesma categoria para ajudá-lo a se aprofundar no tópico.

placeholder

placeholder
Nenhum item correspondente
De volta ao topo

Reuso

Citação

BibTeX
@online{kassambara2024,
  author = {Kassambara, Alboukadel},
  title = {Padrões avançados de geradores em Python},
  date = {2024-02-05},
  url = {https://www.datanovia.com/pt/learn/programming/python/advanced/generators/advanced-generator-patterns.html},
  langid = {pt}
}
Por favor, cite este trabalho como:
Kassambara, Alboukadel. 2024. “Padrões avançados de geradores em Python.” February 5, 2024. https://www.datanovia.com/pt/learn/programming/python/advanced/generators/advanced-generator-patterns.html.