python - o que yield (yield) faz?
Desde o python 2.5, há a capacidade desend()
, throw()
, close()
em um gerador. Dentro do gerador definido, é possível 'capturar' os dados enviados, fazendo algo como:
def gen():
while True:
x = (yield)
if x == 3:
print('received 3!!')
break
else:
yield x
O que estou tentando brincar é fazer algo como:
def gen2():
while True:
yield (yield)
Percebeu que é um gerador legal que faz alguma coisa. A primeira coisa que estou tentando descobrir é:
Existe um bom uso para essa escrita?
Além disso, ao fazer algo como:
g = gen2()
next(g)
g.send(10) # output: 10
g.send(2) # output: nothing
g.send(3) # output: 3
g.send(44) # output: nothing
Por que cada segundo 'enviar' não faz nada?