【发布时间】:2018-02-04 13:59:41
【问题描述】:
从 python 2.5 开始,可以将send()、throw()、close() 转换为生成器。在定义的生成器中,可以通过执行以下操作“捕获”发送的数据:
def gen():
while True:
x = (yield)
if x == 3:
print('received 3!!')
break
else:
yield x
我正在尝试做的事情是:
def gen2():
while True:
yield (yield)
注意到它是一个合法的生成器。 我想弄清楚的第一件事是:
这样写有什么好用的吗?
在做类似的事情时:
g = gen2()
next(g)
g.send(10) # output: 10
g.send(2) # output: nothing
g.send(3) # output: 3
g.send(44) # output: nothing
为什么每一秒的“发送”都不做任何事情?
【问题讨论】:
-
难以重现:我在 send(3) 时得到“StopIteration”...,即当我将
gen2切换为gen时 -
也是你的问题“产量(产量)做什么?” (我可以回答)或者“为什么每一秒的‘发送’都不做任何事情?” (我无法回答)
-
@Jean-FrançoisFabre 我完全明白他所展示的内容。
-
对于您使用各种
.send调用的示例,您是指在交互式提示符处一一执行这些命令时出现的“输出”吗?如果您以非交互方式运行代码,则根本不会有任何输出。