Como usar geradores em Python (instrução de rendimento)
Aprenda como escrever geradores em Python. Entenda a palavra-chave yield, avaliação lenta, otimização de memória e compare geradores com estruturas de lista.
Visão geral
Ao trabalhar com conjuntos de dados massivos, arquivos de log ou fluxos de dados infinitos, carregar todos os elementos na memória simultaneamente (como retornar uma lista grande) pode facilmente esgotar a RAM do sistema e travar seu aplicativo. Python oferece uma solução brilhante e com uso eficiente de memória: Geradores.
Um gerador é um tipo especial de função que retorna um iterador lento. Em vez de calcular todos os valores de uma vez e retorná-los, um gerador produz os valores um por um, conforme solicitado. A principal diferença é a declaração `yield`. Quando uma função geradora chama `yield`, ela pausa seu estado de execução (variáveis, ponteiro de instrução) e retorna o valor produzido. Quando o próximo valor é solicitado, a função retoma exatamente onde foi pausada.
Como os cálculos do gerador são executados lentamente, eles usam quase zero memória, independentemente do tamanho do conjunto de dados. Python também oferece suporte a expressões geradoras, que usam sintaxe entre parênteses `(x for x in data)` para criar geradores embutidos leves sem declarar funções completas.
Saída de código e execução
Este script demonstra a geração de sequências usando funções geradoras com a instrução yield e expressões geradoras.
# 1. Generator function using yield
def count_up_to(limit):
count = 1
while count <= limit:
yield count
count += 1
# Instantiating the generator
counter = count_up_to(3)
print("Memory safe generator instantiated.")
# Fetching values manually
print("Next 1:", next(counter))
print("Next 2:", next(counter))
print("Next 3:", next(counter))
# 2. Iterating with a for loop (automatically handles StopIteration)
print("\n--- Looping over generator ---")
for num in count_up_to(4):
print("Num:", num)
# 3. Generator expression (Shorthand syntax)
squares_gen = (x**2 for x in range(1, 4))
print("\nGenerator expression elements:")
print(list(squares_gen)) # Cast to list to print all elementsMemory safe generator instantiated.
Next 1: 1
Next 2: 2
Next 3: 3
--- Looping over generator ---
Num: 1
Num: 2
Num: 3
Num: 4
Generator expression elements:
[1, 4, 9]Implementação passo a passo
- Defina uma função usando a palavra-chave def padrão.
- Use a palavra-chave yield em vez de return para gerar valores de volta ao fluxo do iterador.
- Itere sobre o gerador usando um loop for ou chame a função next(gen) integrada para extrair valores.
- Use expressões geradoras (usando parênteses) para conversões lentas simples e embutidas.
Perguntas frequentes
Qual é a principal vantagem dos geradores sobre as listas?
Eficiência de memória. As listas armazenam todos os elementos na RAM simultaneamente, enquanto os geradores produzem itens um por um sob demanda, permitindo processar conjuntos de dados maiores que a memória total do sistema.
O que acontece quando um gerador fica sem itens?
Python gera uma exceção StopIteration. Um loop for captura essa exceção automaticamente para sair do loop normalmente, mas chamar next() manualmente em um gerador esgotado lançará a exceção.
Tópicos Relacionados
Aprenda como usar compreensões de lista em Python. Escreva loops concisos, aplique filtros condicionais e crie matrizes com sintaxe visual limpa.
Como usar gerenciadores de contexto em PythonAprenda como os gerenciadores de contexto funcionam em Python. Domine a instrução with, gerencie recursos do sistema e escreva gerenciadores de contexto personalizados.
Recursos Python recomendados
Expanda seu conhecimento com tutoriais interativos relacionados, folhas de dicas e comparações de código.
Geradores Python
Aprenda como usar geradores Python e instruções de rendimento para processar grandes conjuntos de dados com consumo mínimo de memória. Expressões do gerador mestre.
Folha de dicas dos métodos de string Python
Um guia de referência completo para manipulação de strings em Python. Domine a formatação, pesquisa, divisão, substituição e verificação de propriedades de string.
Python vs JavaScript: qual linguagem de programação é a melhor?
Uma comparação abrangente entre Python e JavaScript. Explore diferenças de sintaxe, desempenho, casos de uso (backend versus frontend) e exemplos de codificação.