Chamar uma função generator não roda nenhum código do corpo; ela devolve um objeto generator. O corpo só executa quando você chama next nele, rodando até o primeiro yield, que suspende o frame com as variáveis locais intactas. Cada next seguinte retoma exatamente de onde parou. Quando o corpo retorna, o generator levanta StopIteration, que um loop for captura para você.
Por que os entrevistadores perguntam isso
Isso sonda se você entende execução suspensa, que é o modelo mental por trás de iteradores, context managers escritos com contextlib e corrotinas async. Um entrevistador percebe em duas frases se você só usou generators ou se você sabe que o frame é preservado entre os yields. Também prepara o terreno para perguntas de follow up sobre o protocolo de iteração e sobre send e throw.
Como estruturar sua resposta
- Diga que a chamada devolve um objeto e não roda nada.
- Descreva o ciclo de suspender e retomar em torno do yield.
- Explique como o loop percebe o fim.
- Conecte isso ao protocolo de iteração.
Exemplo de resposta
Chamar não faz quase nada. O Python vê a palavra yield em tempo de compilação, marca a função como generator, e a chamada só devolve um objeto generator com um frame congelado. Nada do corpo rodou ainda, o que pega as pessoas de surpresa quando elas esperam que a validação lá no topo dispare imediatamente. O primeiro next roda até bater num yield, passa aquele valor para fora e congela o frame com todos os locais ainda vivos. Chame next de novo e a execução continua na linha depois do yield. Quando a função chega ao fim ou bate num return sem valor, o Python levanta StopIteration, e um loop for trata isso como o sinal de parar. Por baixo, um generator satisfaz o protocolo de iteração porque tem tanto dunder iter quanto dunder next, então funciona em qualquer lugar onde se espera um iterável. Eu me apoio nisso para pipelines de streaming. Num projeto tínhamos quatro estágios de transformação encadeados como generators, e nenhum estágio segurava mais do que um único registro.
Vai encarar essa entrevista em breve? O GhostPilot escuta a sua chamada ao vivo, identifica a pergunta no instante em que ela é feita e coloca uma resposta estruturada na sua tela em tempo real. Teste na sua próxima entrevista simulada ou pegue um Session Pass de $29, sem assinatura, para a hora da verdade.
Veja como funcionaPerguntas de acompanhamento que você pode esperar
- O que o yield from te dá?
- Como send e throw funcionam num generator?
- Como um async generator é diferente?
Mais perguntas para Desenvolvedor Python
Seu entrevistador vai fazer a própria versão desta. Cole a descrição real da vaga no Question Predictor gratuito e receba as 20 perguntas que essa vaga tem mais chance de fazer, com o que cada uma está de fato sondando.
Prever minhas perguntas