neu*_*ont 10 python yield generator yield-keyword
我正在用Python学习,yield发现这yield不仅是生成器输出返回值的方式,而且是将值放入生成器的方法.例如以下代码
def f():
print (yield),
print 0,
print (yield),
print 1
g = f()
g.send(None)
g.send('x')
g.send('y')
Run Code Online (Sandbox Code Playgroud)
在全球范围内,它send是值'x','y'发电机,因此f它将输出x 0 y 1.但我无法理解
yield秒但3 send秒.为什么要None在第一时间发送?StopIteration最后抛出一个send.有什么方法可以避免这种异常吗?有人可以解释一下吗?提前致谢.
Ble*_*der 10
从文档:
当
send()调用启动生成器时,必须将其None作为参数调用,因为没有yield可以接收该值的表达式.
至于例外,你无法真正避免它.当迭代完成时,生成器抛出此异常,因此不要避免它,只需捕获它:
g = f()
try:
g.send(None)
g.send('x')
g.send('y')
except StopIteration:
print 'Done'
Run Code Online (Sandbox Code Playgroud)