15.12.2022 Views

Python Eficaz

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

código consumidor pode usar os valores de saída do gerador para chamar outras

funções e atualizar estruturas de dados. Mais importante, pode avançar as

funções de outras funções geradoras até a próxima expressão yield.

Extrapolando, dado um grande número de geradores, se cada um disparar o

avanço de outro separadamente, nessa sequência de “avança um passo e depois

para” (ou, em inglês, lockstep), eles todos parecerão estar rodando

simultaneamente, imitando o comportamento concorrente das threads do Python.

Jogo da Vida

O comportamento simultâneo das corrotinas pode ser demonstrado com um

exemplo bastante conhecido. Digamos que se queira usar corrotinas para

implementar o Jogo da Vida, de John Conway 1 . As regras do jogo são bastante

simples. Temos uma grade bidimensional de tamanho arbitrário. Cada célula na

grade pode tanto estar viva ou vazia.

ALIVE = '*'

EMPTY = '-'

O jogo progride um passo por vez a cada pulso (“tic-tac”) do relógio. Cada vez

que o relógio faz tic (ou tac) cada uma das células conta quantas células vizinhas

(num total de 8) estão vivas. Baseado na contagem de vizinhos, cada célula

decide se continuará viva, morrerá ou voltará dos mortos. O código a seguir

mostra um exemplo de um Jogo da Vida em uma grade de 5×5, com o tempo

passando da esquerda para a direita. Veremos as regras específicas mais tarde.

0 | 1 | 2 | 3 | 4

----- | ----- | ----- | ----- | -----

-*--- | --*-- | --**- | --*-- | -----

--**- | --**- | -*--- | -*--- | -**--

---*- | --**- | --**- | --*-- | -----

----- | ----- | ----- | ----- | -----

Podemos modelar esse jogo representando cada célula como uma corrotina

geradora rodando em lockstep (“avança um passo e depois para”) em relação a

todas as outras.

Para essa implementação, primeiro precisamos de uma maneira de obter o estado

das células vizinhas. Podemos fazer isso com uma corrotina chamada

www.full-ebook.com

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

Saved successfully!

Ooh no, something went wrong!