我正在学习Python中的yield
,发现yield
不仅是生成器输出返回值的方式,也是将值放入生成器的一种方法。例如以下代码:
def f():
print (yield),
print 0,
print (yield),
print 1
g = f()
g.send(None)
g.send('x')
g.send('y')
在全局范围内,它向生成器发送值'x'、'y',因此在函数f
中,它将输出x 0 y 1
。但我无法理解:
- 为什么第一次要发送
None
,而不是两个值中的一个? - 最后一个
send
会抛出StopIteration
异常,有没有什么办法可以避免这个异常?
有人能解释一下吗?谢谢!
yield
。生成器不会关闭,但最终将被垃圾回收。 - Rafa Viotti