0Pricing
Python Academy · Aula

Expressões geradoras

Crie sequências avaliadas sob demanda com expressões geradoras para usar menos memória.

Expressões geradoras é uma aula grátis de Python Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Python Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Python Academy inclui 4 aulas no total.

Introdução

Expressões geradoras são compreensões avaliadas sob demanda — elas produzem valores um de cada vez sem criar uma lista na memória.

Sintaxe de expressão geradora

(expression for item in iterable) usa parênteses. Retorna um objeto gerador, NOT uma lista.
gen = (x**2 for x in range(5))
print(gen)  # generator object
print(next(gen))  # 0
print(next(gen))  # 1

Eficiência de memória

Um gerador mantém apenas um valor por vez. sum(x**2 for x in range(10**7)) usa memória O(1), em comparação com uma lista.
total = sum(x**2 for x in range(100))
print(total)

Consumindo um gerador

Os geradores são consumidos uma vez. Depois de esgotados, StopIteration é gerada e não resta nada.
gen = (x for x in range(3))
for val in gen:
    print(val)
# gen is now exhausted

Gerador como argumento de função

Se um gerador for o único argumento, você pode omitir os parênteses extras: sum(x**2 for x in range(10)).
print(sum(x**2 for x in range(10)))
print(max(len(w) for w in ['cat', 'elephant', 'ant']))

Encadeando geradores

Você pode encadear geradores de forma preguiçosa: evens = (x for x in range(100) if x%2==0); big = (x for x in evens if x>50).
evens = (x for x in range(100) if x % 2 == 0)
big_evens = (x for x in evens if x > 50)
print(list(big_evens))

Convertendo para lista/tupla

list(gen) ou tuple(gen) materializa todos os valores. Faça isso quando precisar de acesso aleatório ou de várias passagens.
gen = (x**2 for x in range(5))
print(list(gen))

Expressão geradora versus compreensão de lista

Use um gerador quando: você só precisa iterar uma vez ou o conjunto de dados é grande. Use uma lista quando: precisa de len(), indexação ou várias passagens.
import sys
lst = [x**2 for x in range(1000)]
gen = (x**2 for x in range(1000))
print(sys.getsizeof(lst), sys.getsizeof(gen))

Geradores infinitos

itertools.count(0) é um contador infinito. Combine-o com islice para obter apenas o que precisa.
import itertools
first10 = list(itertools.islice(itertools.count(0), 10))
print(first10)

any() e all() com geradores

any(x>5 for x in lst) faz uma interrupção antecipada — para no primeiro True. all() para no primeiro False. É muito eficiente.
nums = [1, 3, 7, 2]
print(any(x > 5 for x in nums))
print(all(x > 0 for x in nums))

Fluxos de processamento

Encadeie transformações de forma preguiçosa: dados → filtro → transformação → agregação. Cada etapa é um gerador; nada é executado até ser necessário.
data = range(1000)
filtered = (x for x in data if x % 7 == 0)
transformed = (x * 2 for x in filtered)
print(sum(transformed))

Verificação rápida

Qual é a principal vantagem de memória de uma expressão geradora em comparação com uma compreensão de lista?

Recapitulação

Expressões geradoras: (expr for x in it). Avaliação sob demanda — memória O(1). São consumidas uma vez. Use-as com sum/any/all/max. Converta-as em lista quando precisar de várias passagens.

Continue

Excelente! Continue para a próxima lição para aprofundar seus conhecimentos.

Perguntas Frequentes

A aula “Expressões geradoras” é grátis?

Sim — o texto completo de “Expressões geradoras” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Python Academy, atualize para CoddyKit PRO. O curso de Python Academy inclui 4 aulas no total.

O que vou aprender em “Expressões geradoras”?

Crie sequências avaliadas sob demanda com expressões geradoras para usar menos memória. Você pratica Python Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Python Academy?

Nenhuma experiência prévia é necessária. Python Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.

Quanto tempo leva a aula “Expressões geradoras”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Python Academy?

Sim. Cada aula de Python Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Compreensões de listas
  2. Compreensões de conjuntos e dicionários
  3. Expressões geradoras
  4. A palavra-chave yield
← Voltar para Python Academy