Expressões geradoras
Escreva pipelines compactos e preguiçosos
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.
Da compreensão de lista à expressão geradora
Uma expressão geradora se parece com uma compreensão de lista, mas usa parênteses em vez de colchetes. Ela produz valores de forma tardia, em vez de criar uma lista completa.
list_comp = [x * x for x in range(5)]
gen_expr = (x * x for x in range(5))
print(list_comp)
print(gen_expr)
print(list(gen_expr))Diferença de memória
Uma compreensão de lista aloca todos os elementos antecipadamente. Uma expressão geradora quase não ocupa espaço até que você solicite valores. Compare os tamanhos delas.
import sys
lst = [x for x in range(10000)]
gen = (x for x in range(10000))
print('list bytes:', sys.getsizeof(lst))
print('gen bytes:', sys.getsizeof(gen))Iterando sobre uma expressão geradora
Você consome uma expressão geradora como qualquer iterador: com um laço for, usando next() ou passando-a para uma função.
gen = (c.upper() for c in 'hello')
for ch in gen:
print(ch)Filtragem com if
Adicione uma cláusula if para manter apenas os itens correspondentes, exatamente como em uma compreensão.
evens = (n for n in range(10) if n % 2 == 0)
print(list(evens))Passando diretamente para funções
Quando uma expressão geradora é o único argumento de uma função, você pode remover os parênteses extras. Isso deixa o código mais claro e evita criar uma lista temporária.
total = sum(x * x for x in range(5))
print(total)
biggest = max(len(w) for w in ['a', 'abc', 'ab'])
print(biggest)Lembrete: uso único
Uma expressão geradora se esgota após uma única passagem, assim como uma função geradora. A segunda iteração não produz nada.
gen = (x for x in range(3))
print(list(gen))
print(list(gen))Encadeando expressões
Você pode alimentar uma expressão geradora com outra para criar um pipeline tardio. Nada é calculado até que o consumidor final solicite valores.
nums = (n for n in range(10))
evens = (n for n in nums if n % 2 == 0)
doubled = (n * 2 for n in evens)
print(list(doubled))any() e all()
Expressões geradoras são especialmente úteis com any() e all(), pois podem interromper a avaliação assim que a resposta é conhecida.
words = ['cat', 'dog', 'elephant']
print(any(len(w) > 5 for w in words))
print(all(len(w) >= 3 for w in words))Laços aninhados
Assim como as compreensões, as expressões geradoras aceitam várias cláusulas for, lidas da esquerda para a direita.
pairs = ((x, y) for x in range(2) for y in range(2))
print(list(pairs))Exemplo de pipeline tardio
Aqui está um pequeno pipeline de processamento de texto. Cada etapa é tardia, portanto um arquivo enorme poderia ser transmitido sem ser carregado inteiro.
lines = [' alpha ', '', ' beta', 'gamma ']
stripped = (line.strip() for line in lines)
nonempty = (line for line in stripped if line)
print(list(nonempty))Quando escolher cada opção
Use uma compreensão de lista quando precisar dos dados várias vezes ou precisar de indexação. Use uma expressão geradora para processamento em fluxo de uma única passagem ou para dados grandes.
data = range(6)
as_list = [x + 1 for x in data]
print(as_list[0], as_list[-1])
total = sum(x + 1 for x in data)
print(total)Verificação rápida
Teste sua compreensão das expressões geradoras.
Recapitulação
Você aprendeu sobre expressões geradoras:
- Use parênteses como uma alternativa tardia às compreensões de lista.
- Elas economizam memória e aceitam filtros com
ife laços aninhados. - Combinam bem com
sum,any,alle encadeamentos. - São de uso único.
Em seguida: compondo geradores com yield from.
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”?
Escreva pipelines compactos e preguiçosos 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
- O protocolo de iteradores
- Funções geradoras
- Expressões geradoras
- yield from e delegação