Geradores em Python

0 – Python
6 – Funcional
6.1 – Funcoes puras
6.2 – Imutabilidade (tuplas, frozenset, namedtuple)
6.3 – Funcoes de alta ordem (map, filter, reduce)
6.4 – Comprehensions (list, dict, set)
6.5 – Geradores (yield, generator expressions)
6.6 – Decorators (@)
6.7 – Closures
6.8 – Funcoes lambda
LEGENDA
Nivel_1
Nivel_2
Nivel_3

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.

Deixe um comentário