我正在学习科鲁丁,但奇怪的是我不明白.这是消息来源
@coroutine
def printer():
tmp=(yield)
print tmp
def sender(coru):
coru.send("hello")
print "I'm sender"
if __name__=="__main__":
coru=printer()
sender(coru)
print "I'm master"显示
你好 StopItertationError @ coru.send("hello")
同时,
@coroutine
def printer():
while 1:
tmp=(yield)
print tmp
def sender(coru):
coru.send("hello")
print "I'm sender"
if __name__=="__main__":
coru=printer()
sender(coru)
print "I'm master"显示
你好 我是发送者 我是师父
正确无误。
所以我想知道
谢谢你的阅读,如果你点亮我,我真的很感激:)
发布于 2012-08-06 08:57:37
当生成器(如printer)结束时,它会引发StopIteration异常。
当Python执行
coru.send("hello")它跳到
tmp = (yield)并向tmp发出“你好”。然后执行下一行:
print tmp然后生成器结束,从而引发StopIteration异常。
另一方面,如果不允许printer结束(通过使用while 1循环),则不会引发StopIteration异常。相反,执行(在printer中)一直持续到到达下一个yield表达式为止:
tmp = (yield)send方法返回该yield表达式的值(在本例中为None)。此时,Python再次返回到sender函数,然后执行
print "I'm sender"yield from语法的目的是使将生成器(用于与send和throw一起使用)重构为子生成器变得更容易。请参阅PEP380和Python3的新特点是什么?.
它不会改变StopIteration行为。
发布于 2012-08-06 09:00:25
这是一个非常好的合作介绍:
http://www.dabeaz.com/coroutines/
特别是,您可以查看:
http://www.dabeaz.com/coroutines/grep.py
和(exemple @coroutine ):
http://www.dabeaz.com/coroutines/coroutine.py
https://stackoverflow.com/questions/11824954
复制相似问题