Python - 了解生成器的发送函数



我正在学习 Python yield,发现yield不仅是生成器输出返回值的方式,也是将值放入生成器的一种方式。例如以下代码

def f():
    print (yield),
    print 0,
    print (yield),
    print 1
g = f()
g.send(None)
g.send('x')
g.send('y')

在全局范围内,它send的值'x''y'到生成器,因此f它将输出x 0 y 1。但我无法理解

  • 有 2 yield 秒,但 3 send 秒。为什么要在第一时间发送None
  • 它在最后一send抛出了一个StopIteration.有什么方法可以避免这种异常吗?

谁能解释一下?提前谢谢。

从文档中:

当调用 send() 来启动生成器时,必须使用 None 作为参数调用它,因为没有可以接收该值的yield表达式。

至于例外,你真的无法避免它。生成器在完成迭代时会抛出此异常,因此与其避免它,不如捕获它:

g = f()
try:
    g.send(None)
    g.send('x')
    g.send('y')
except StopIteration:
    print 'Done'

相关内容

  • 没有找到相关文章

最新更新