在Python中编写协程无限显示"奇数"和"偶数

0 投票
2 回答
848 浏览
提问于 2025-04-15 12:33

我对生成器、迭代器和协程有一些模糊的了解(来自PEP和其他教程)。我想实现一个协程,其中routine1会无限打印奇数,routine2会无限打印偶数,像这样:

routine1:
    print odd
    yield to routine2

routune2:
    print even
    yield to routine1

我对应该怎么写这个代码有一些粗略的想法,但还没能整理好。我不想要代码。不过,我会很感激如果能给我一些伪代码风格的提示。谢谢。

2 个回答

1

你会把控制权交还给调用你的那个方法。所以你不能直接把控制权交给例程1。你只是交出控制权。你可以让例程1去调用例程2,然后例程2可以交出控制权,这样就能返回到例程1。

2

PEP 342,也就是“通过增强生成器实现协程”,里面举了个例子,讲的是一个简单的协程调度器,或者说“跳板”,它可以让一个协程“调用”另一个协程,通过让出(yield)想要调用的协程。其实,对于这个特定的任务,你并不需要那么复杂的功能(或者说PEP 342里提到的那些复杂的特性),因为这两个协程之间并没有什么信息交流,它们只有两个,而且执行的顺序是完全规律的,也没有结束等等……不过,里面的一小部分代码还是值得实现的,因为它能让你对协程有更深入的理解,而不仅仅是这个非常简单的例子。

这两个协程最好是来自同一个生成器函数,只是起始点不同(毕竟,写两个while True:循环也没什么意义,考虑到它的内容会非常简单;-)。正如你将看到的,最有趣的部分是跳板,尽管你可以并且应该把它做得比PEP 342中的那个简单得多。

撰写回答