Exercícios
Avalie seus conhecimentos sobre geradores e iteradores em Python neste questionário. Explore o protocolo de iteração com iter() e next(), o uso de yield e yield from, o comportamento de send(), close() e StopIteration, além das vantagens de memória das expressões geradoras em comparação às compreensões de lista. As questões também abordam geradores consumidos, valores padrão em next(), a função iter com sentinela, a execução preguiçosa de funções geradoras e cuidados ao utilizar itertools.tee. Ideal para praticar conceitos essenciais de Python e compreender como processar sequências de forma eficiente.
Responda às questões abaixo e confira a explicação de cada resposta.
0/15 respondidas
Áudio automático ativado: as próximas questões serão lidas ao clicar em Continuar.
O método __iter__() fornece o iterador, enquanto __next__() devolve o próximo item ou sinaliza o fim da iteração.
yield produz um valor e suspende a função. Variáveis locais e a posição de execução são preservadas até a próxima solicitação de valor.
Geradores usam avaliação preguiçosa: normalmente produzem um item por vez. Assim, não precisam manter toda a sequência simultaneamente na memória.
StopIteration é levantada por __next__() quando a sequência termina. Estruturas como o laço for tratam esse sinal automaticamente.
Uma expressão geradora utiliza parênteses. Colchetes criam uma lista, enquanto a terceira alternativa cria um dicionário.
next(g) avança até o primeiro yield e devolve 10. Depois, send(7) faz o primeiro yield resultar em 7 dentro da função, e o gerador produz 14.
yield from delega parte da iteração a outro iterável. Com subgeradores, também encaminha operações como send() e permite capturar o valor de retorno.
Na forma iter(função, sentinela), a função é chamada até produzir a sentinela. O valor 0 encerra a iteração, não é incluído e impede a leitura do 9.
Geradores são iteradores de passagem única. Depois de esgotados, não reiniciam; é necessário criar um novo objeto gerador para produzir novamente os valores.
return encerra o gerador. Seu valor é transportado pela exceção StopIteration e pode ser recebido por uma expressão yield from delegadora.
close() injeta GeneratorExit no ponto em que o gerador está suspenso. Isso permite executar blocos finally e liberar recursos antes do encerramento.
tee mantém valores em buffers para os iteradores atrasados. Se um deles avançar muito à frente dos demais, o consumo temporário de memória pode crescer significativamente.
O segundo argumento de next() é um valor padrão. Quando o iterador está esgotado, esse valor é devolvido em vez de StopIteration ser propagada.
Criar o gerador não executa seu corpo. Primeiro é impresso C. next(g) inicia a função, imprime A e suspende no yield; B só seria impressa em um avanço posterior.
A compreensão de lista cria e armazena todos os elementos. A expressão geradora calcula cada elemento conforme solicitado e normalmente só pode ser percorrida uma vez.

Curso GratuitoAnálise e projeto de sistemas
11h02m
9 exercícios

Curso GratuitoPython do Zero ao Avançado
28h22m
54 exercícios

Curso GratuitoProgramação orientada a objeto usando Java
11h56m
10 exercícios

Curso GratuitoProgramação em C
11h21m
22 exercícios

Curso GratuitoRuby on Rails para iniciantes
16h31m
32 exercícios

Curso GratuitoJava
27h43m
62 exercícios

Curso GratuitoProgramação em Python
10h21m
27 exercícios

Curso GratuitoEngenharia de software
7h58m
24 exercícios
Milhares de cursos online em vídeo, ebooks e áudiobooks.
Para testar seus conhecimentos no decorrer dos cursos online
Gerado diretamente na galeria de fotos do seu celular e enviado ao seu e-mail
Baixe nosso aplicativo pelo QR Code ou pelos links abaixo:.
+ de 10 milhões
de alunos
Certificado grátis e
válido em todo o Brasil
60 mil exercícios
gratuitos
4,8/5 classificação
nas lojas de apps
Cursos gratuitos em
vídeo, ebooks e audiobooks