ExpertiDict

Python · Avançado · Inglês · Técnico

generator send

/ˈdʒɛnəɹeɪtəɹ ˈsɛnd/método

Método que retoma um gerador pausado e entrega um valor ao yield onde ele parou, que passa a valer como resultado da expressão. Transforma o gerador numa corrotina simples.

Onde usar

Usado em pipelines que recebem dados aos poucos, como acumuladores de média, e por quem estuda como o asyncio nasceu. Em code review, é raro e deve vir com comentário explicativo.

Em código

def media():
  total, n = 0, 0
  while True:
    x = yield (total / n if n else 0)
    total, n = total + x, n + 1
g = media()
next(g)  # avança até o primeiro yield
print(g.send(10), g.send(20))  # 10.0 15.0

Exemplos

You must call next before the first send.

Você precisa chamar next antes do primeiro send.

The average generator receives values through send.

O gerador de média recebe valores pelo send.

Cuidado

O primeiro envio precisa ser next(g) ou send(None); mandar um valor antes de o gerador chegar ao primeiro yield causa TypeError.

Sinônimos

envio para gerador

Veja também

Todos os termos de Python