我可以将其表示为生成器/协同程序吗?

时间:2011-06-21 15:45:09

标签: python generator coroutine

假设我有以下课程:

class MyGen(object):
  def next(self):
    return X()

  def send(self, x):
    return f(x)

是否可以使用yield关键字将其表示为单个函数?假设我有g = MyGen()。请注意,g.next()不应致电f()g.send(x)不应致电X(),但f()X()可以共享部分代码。

2 个答案:

答案 0 :(得分:3)

此代码几乎相同:

def my_gen(x=None):
    while True:
        if x is None:
            x = yield X()
        else:
            x = yield f(x)

一个区别是,在第一次调用None之前,您无法向生成器发送值(next()除外)。另一个区别是发送None不会触发调用f(),因为生成器无法区分send(None)next()

答案 1 :(得分:1)

Sven的配方正是要走的路,我只是想补充一点,如果你想在Python中了解更多关于生成器,协同程序等的内容,this site就是你要去的地方。