Python · Avançado · Inglês · Técnico
generator send
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.0Exemplos
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