single
Funções Geradoras
Deslize para mostrar o menu
Uma função geradora é um tipo especial de função que utiliza a palavra-chave yield em vez de return para gerar uma sequência de valores. Quando uma função geradora é chamada, ela retorna um objeto iterador, que pode ser percorrido para recuperar os valores um de cada vez.
A principal vantagem das funções geradoras é a eficiência de memória. Em vez de gerar toda a sequência antecipadamente e armazená-la na memória, os geradores produzem valores sob demanda conforme necessário.
Como o yield funciona
Diferente do return, que encerra completamente a função, o yield pausa a função e salva seu estado. Na próxima chamada de next(), o gerador retoma exatamente de onde parou:
12345678910def count_up(start, stop): while start <= stop: yield start # Pause and return the current value start += 1 # Resume from here on the next call counter = count_up(1, 3) print(next(counter)) # 1 print(next(counter)) # 2 print(next(counter)) # 3
Também é possível iterar sobre um gerador usando um loop for – ele chama automaticamente next() até que o gerador seja esgotado:
1234567def count_up(start, stop): while start <= stop: yield start start += 1 for value in count_up(1, 5): print(value) # 1, 2, 3, 4, 5
Quando um gerador é esgotado (não há mais valores para gerar), chamar next() nele irá gerar um erro StopIteration. Um loop for lida com isso automaticamente.
Deslize para começar a programar
Implemente uma função geradora even_numbers que produza números pares em um determinado intervalo.
- Definição de uma função geradora
even_numberscom dois parâmetros:startestop. - Utilização de um laço
whilepara iterar enquantostartfor menor ou igual astop. - Utilização de
yieldpara retornarstartapenas se for par (divisível por 2). - Incremento de
startem 1 após cada iteração. - Utilização de um laço
forpara exibir todos os valores gerados.
Solução
Obrigado pelo seu feedback!
single
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo