Geradores em Python

python

O que é yield?

yield é uma palavra-chave que transforma uma função em um gerador (generator). Diferente de return, que encerra a função e retorna um único valor, yield permite que a função “pause” sua execução, retorne um valor e depois retome de onde parou.


Características principais:

  • Lazy evaluation (avaliação preguiçosa): gera valores sob demanda
  • Eficiência de memória: não armazena toda a sequência
  • Estado preservado: mantém variáveis locais entre chamadas

Geradores são funções que produzem valores um de cada vez. Eles usam yield em vez de return para pausar a execução. Primeiramente, geradores economizam memória para grandes sequências. Por exemplo, range(1000000) é um gerador, não uma lista. Além disso, geradores podem produzir sequências infinitas. A voz passiva é usada aqui: “os valores são gerados sob demanda, não antecipadamente”. Quando utilizar geradores? Em processamento de grandes arquivos. Também em fluxos de dados infinitos e pipelines eficientes. Python oferece funções geradoras (yield) e expressões geradoras. Vamos explorar ambos os tipos com exemplos práticos. Três subtítulos guiarão você pelo universo dos geradores. Ao final, você economizará memória e processamento significativamente.

Funções geradoras com yield

Uma função geradora usa yield em vez de return. Ela retorna um objeto gerador, não uma lista completa. Cada yield pausa a função e guarda seu estado. Quando usar funções geradoras? Em sequências complexas. Por exemplo, Fibonacci, números primos ou leitura de arquivos grandes. A voz passiva é aplicada: “o estado da função é preservado entre chamadas”. Exemplo de funções geradoras:

Geradores com yield são poderosos e eficientes. Eles permitem pausar e retomar a execução livremente.

Expressões geradoras: generator expressions

Generator expressions são como list comprehensions, mas com parênteses. Elas produzem valores sob demanda, não uma lista inteira. A sintaxe é (expressão for item in iterável). Quando usar generator expressions? Em transformações de dados grandes. Também quando você só precisa iterar uma vez sobre os valores. A voz passiva é aplicada: “os elementos são produzidos um por um”. Exemplo de generator expressions:

Generator expressions economizam memória drasticamente. Elas são ideais para processamento de grandes volumes de dados.

Comparando geradores com listas e aplicações práticas

Geradores são melhores para grandes volumes de dados. Listas são melhores quando você precisa acessar múltiplas vezes. Quando usar cada um? Listas para dados pequenos e reuso. Geradores para streams grandes e iteração única. A voz passiva é aplicada: “os dados são processados em fluxo contínuo”. Exemplo prático e comparação detalhada:

Geradores são fundamentais para programação eficiente. A fórmula da economia de memória com geradores: \(M_{\text{gerador}} \approx O(1) \quad \text{vs} \quad M_{\text{lista}} \approx O(n)\) Use geradores para grandes volumes de dados. Use listas quando precisar de acesso aleatório múltiplo. Geradores com yield são ideais para sequências complexas. Generator expressions são perfeitas para transformações simples. Seu código será mais eficiente e escalável com geradores.

Comprehensions em Python

python

Comprehensions são sintaxes concisas para criar coleções em Python. Elas substituem loops tradicionais por expressões declarativas. Primeiramente, list comprehension é a mais comum entre elas. Por exemplo, [x*2 for x in range(5)] gera [0,2,4,6,8]. Além disso, dict comprehension e set comprehension também existem. Assim, você escreve menos código e com mais clareza. Consequentemente, a manutenção se torna muito mais fácil. Quando utilizar comprehensions? Em transformações simples de coleções. Também para filtrar e mapear dados de forma legível. Por outro lado, para lógica muito complexa, loops são melhores. Elas são mais rápidas e pythonicas que loops manuais. Então, vamos explorar cada tipo com exemplos práticos. Três subtítulos guiarão você pelas comprehensions. Portanto, ao final, você escreverá código mais limpo e eficiente.

List comprehension: gerando listas de forma concisa

List comprehension cria uma nova lista a partir de um iterável. A sintaxe básica é [expressão for item in iterável]. Você pode adicionar condicionais com if no final. Quando usar list comprehension? Para mapeamentos e filtros simples. Elas são mais rápidas que loops for tradicionais. Além disso, você pode aninhar múltiplos for e if. Exemplo de list comprehension:

List comprehensions são rápidas e expressivas. Use-as sempre que possível para código mais limpo. Portanto, prefira comprehension a loops simples.

Dict comprehension: criando dicionários dinâmicos

Dict comprehension cria dicionários com sintaxe semelhante. A forma é {chave: valor for item in iterável}. Você também pode adicionar condicionais e múltiplos for. Quando usar dict comprehension? Em transformações chave-valor. Por exemplo, inverter dicionários ou criar mapeamentos. Além disso, você pode combinar duas listas facilmente. Exemplo de dict comprehension:

Dict comprehension é ideal para transformar listas em dicionários. Ela torna o código mais legível que loops com dict.update(). Assim, você evita código verboso e repetitivo.

Set comprehension: conjuntos únicos e eficientes

Set comprehension cria conjuntos (sets) com elementos únicos. A sintaxe é {expressão for item in iterável}. Ela remove duplicatas automaticamente por definição. Quando usar set comprehension? Em operações com elementos únicos. Por exemplo, extrair valores distintos de uma lista. Além disso, set comprehension é muito eficiente em performance. Exemplo de set comprehension:

Set comprehension é eficiente e elimina duplicatas. A fórmula geral das comprehensions é clara: \(C = [f(x) \text{ for } x \text{ in } S \text{ if } p(x)]\) Comprehensions são mais pythonicas que loops tradicionais. Elas são mais rápidas, mais curtas e mais legíveis. Use list comprehension para transformar sequências. Use dict comprehension para mapeamentos chave-valor. Use set comprehension para conjuntos únicos. Portanto, seu código será mais expressivo e profissional. Finalmente, pratique comprehensions em todos os seus projetos.