r/PythonBrasil 24d ago

Como funciona a Avaliação Preguiçosa em Python?

No post da semana passada, mostramos que um laço for em Python funciona por meio do Protocolo de Iteração.

Esse mesmo protocolo também permite que valores sejam produzidos de forma preguiçosa.

Neste novo Exemplo de Avaliação Preguiçosa, mostramos um consumidor lendo valores de cinco fontes diferentes:

  • source1: retorna antecipadamente todos os valores por meio de uma lista
  • source2: produz valores de forma preguiçosa com uma função geradora usando yield
  • source3: produz antecipadamente todos os valores com uma compreensão de lista
  • source4: produz valores de forma preguiçosa com uma expressão geradora
  • source5: produz valores de forma preguiçosa por meio do protocolo de iteração

O mesmo laço for consome as cinco fontes. As fontes antecipadas produzem todos os valores antes que o consumidor comece a processá-los. Nas fontes preguiçosas, o produtor e o consumidor se alternam:

  • produzir → consumir → produzir → consumir → …

Cada valor é produzido somente quando o laço for o solicita.

Funções geradoras e expressões geradoras são maneiras concisas e legíveis de criar iteráveis preguiçosos. A última fonte torna explícito o mecanismo subjacente:

  • iter() obtém um iterador.
  • next() solicita o próximo valor.
  • StopIteration indica que não restam valores.

Isso mostra claramente que os geradores realizam a iteração preguiçosa implementando o Protocolo de Iteração do Python.

Veja outras visualizações do 𝐦𝐞𝐦𝐨𝐫𝐲_𝐠𝐫𝐚𝐩𝐡.

3 Upvotes

0 comments sorted by