15.12.2022 Views

Python Eficaz

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Por exemplo, digamos que se queira implementar uma corrotina geradora que

indique o valor mínimo que enviou até o momento. No exemplo de código a

seguir, o yield sozinho prepara a corrotina com um valor mínimo inicial enviado

do mundo externo. O gerador, então, repetidamente informa o novo mínimo em

troca do próximo valor a considerar:

def minimize():

current = yield

while True:

value = yield current

current = min(value, current)

O código que consome o gerador pode ser executado um passo de cada vez e

enviará para a saída o valor mínimo visto logo depois que cada valor seja

apresentado na entrada.

it = minimize()

next(it) # Inicializa o gerador

print(it.send(10))

print(it.send(4))

print(it.send(22))

print(it.send(-1))

>>>

10

4

4

-1

A função geradora poderia aparentemente rodar para sempre, progredindo a cada

nova chamada a send. Da mesma forma que nas threads, as corrotinas são

funções independentes que consomem valores de entrada entregues por qualquer

elemento de seu ambiente e produzem resultados na saída. A diferença é que as

corrotinas entram em pausa a cada expressão yield na função geradora e

retomam o processamento após cada chamada a send vinda do mundo exterior.

Este é o mecanismo mágico das corrotinas.

Esse comportamento permite que o código que esteja consumindo um gerador

possa iniciar alguma ação logo depois de cada expressão yield na corrotina. O

www.full-ebook.com

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!