【发布时间】:2012-08-06 08:38:51
【问题描述】:
我正在学习 Coroutine,但它的工作方式很奇怪,我无法理解...... 这是来源
@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"
表演
你好
我是发件人
我是大师
正确。
所以我想知道
为什么协程总是使用循环以及为什么第一个示例会出现错误
我在 3.3 版中听说过“yield from”语法。这对第一个工作有帮助吗?
-
我知道每个协程函数的工作方式与子程序不同。
但是,我认为,在Printer函数结束后,程序应该终止而不返回Sender。
但确实如此。不是说发件人优于打印机吗?那么子程序和协程有什么区别呢。
感谢您的阅读,如果您能启发我,我真的很感激:)
【问题讨论】:
-
关于@coroutine。它只是自动化 func.next() 以使协程准备就绪的包装器