在Python中编写协程以无限地显示“奇数”和“偶数”数字

时间:2009-06-29 13:42:05

标签: python

我有关于发电机,迭代器和协同程序的拙劣想法。 (来自PEP和其他教程)。我想实现一个协程 - 其中routine1将打印奇数,而routine2将以无限方式打印偶数,例如:

routine1:
    print odd
    yield to routine2

routune2:
    print even
    yield to routine1

对应该执行此操作的代码有一些粗略的想法,但无法使其成形。我想要代码。但是,我会欣赏伪代码样式指针。谢谢。

2 个答案:

答案 0 :(得分:2)

PEP 342,“通过增强型生成器协同程序”,作为示例3'一个简单的协同例程调度程序或“trampoline”,允许协同程序通过产生他们希望调用的协程来“调用”其他协同程序。 - 你不需要那么多的普遍性(或PEP 342首先介绍的任何一般性方面),对于这个非常具体的任务,鉴于协同程序没有相互通信,只有两个,它们的顺序继承是完全正常的,没有终止等等......但是该代码的一小部分仍然值得实现,因为它向你展示了更多关于协同程序的信息,而不仅仅是这个非常简单的例子。

两个协同程序可能应该是来自同一生成器函数的两个实例,这两个实例的起点不同(毕竟没有写while True:循环两次,因为它的主体将是多么简单;-)。正如你所看到的,有趣的部分是蹦床,尽管你可以而且应该比PEP 342中的普通蹦床简单得多。

答案 1 :(得分:1)

您回到调用您的方法。因此,你不能屈服于常规1.你只是屈服。你可以让例程1调用例程2,例程2可以产生并因此返回到例程1。