0Pricing
Python Academy · Aula

A palavra-chave yield

Escreva funções geradoras com yield para criar iteradores personalizados.

A palavra-chave yield é uma aula grátis de Python Academy no CoddyKit. Esta é a aula 4 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

Funções geradoras usam yield para produzir uma sequência de valores de forma preguiçosa, pausando a execução entre cada yield.

O que é yield?

Uma função com yield é uma função geradora. Cada chamada a next() retoma a execução a partir do último yield.
def count_up(n):
    for i in range(n):
        yield i
for x in count_up(3):
    print(x)

Função geradora versus função normal

Chamar uma função geradora retorna um objeto gerador — NOT executa código imediatamente. O código é executado conforme você itera.
def gen():
    print('start')
    yield 1
    print('middle')
    yield 2
g = gen()  # no print yet
print(next(g))  # 'start', then 1

Gerador infinito

def naturals(n=0): while True: yield n; n+=1 é uma sequência infinita. Use-a com islice ou break.
def naturals(n=0):
    while True:
        yield n
        n += 1
import itertools
print(list(itertools.islice(naturals(), 5)))

yield from

yield from sub_gen() delega para um subgerador, encaminhando todos os valores. Equivale a for x in sub: yield x.
def chain(*iters):
    for it in iters:
        yield from it
print(list(chain([1,2], [3,4], [5])))

Enviando valores com send()

gen.send(value) retoma o gerador AND passa um valor que se torna o resultado da expressão yield.
def accumulator():
    total = 0
    while True:
        n = yield total
        if n is None: break
        total += n
g = accumulator()
next(g)  # prime
print(g.send(10))
print(g.send(5))

Estado do gerador

Um gerador pausa em cada yield e mantém suas variáveis locais entre as chamadas — um corrotina natural.
def stateful():
    seen = set()
    while True:
        item = yield
        seen.add(item)
        yield len(seen)
g = stateful()
next(g); g.send('a'); print(next(g)); g.send('b'); print(next(g))

Fechando um gerador

gen.close() lança GeneratorExit dentro do gerador. Use try/finally dentro do gerador para fazer a limpeza.
def resource_gen():
    try:
        while True:
            yield
    finally:
        print('cleaned up')
g = resource_gen()
next(g)
g.close()

StopIteration e return

return value em um gerador define o atributo value da exceção StopIteration. yield from o usa para recuperar esse valor.
def gen_with_return():
    yield 1
    yield 2
    return 'done'
g = gen_with_return()
try:
    while True: print(next(g))
except StopIteration as e:
    print('returned:', e.value)

Gerador de Fibonacci

Os geradores são excelentes para sequências matemáticas infinitas: yield a; a, b = b, a+b
def fibonacci():
    a, b = 0, 1
    while True:
        yield a
        a, b = b, a + b
import itertools
print(list(itertools.islice(fibonacci(), 10)))

Geradores versus classes com __iter__

Os geradores são mais simples do que escrever uma classe com __iter__ e __next__. Use geradores para sequências diretas.
# Generator is simpler than:
# class Counter:
#     def __iter__(self): return self
#     def __next__(self): ...
print('generators simplify iterators')

Verificação rápida

O que yield from sub() faz em uma função geradora?

Recapitulação

yield pausa uma função geradora. Funções geradoras retornam um objeto gerador. yield from delega para subgeradores. send() passa valores. close() aciona a limpeza.

Continue

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

Perguntas Frequentes

A aula “A palavra-chave yield” é grátis?

Sim — o texto completo de “A palavra-chave yield” é 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 “A palavra-chave yield”?

Escreva funções geradoras com yield para criar iteradores personalizados. 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 4 de 4.

Quanto tempo leva a aula “A palavra-chave yield”?

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