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

标签 python generator coroutine

假设我有以下类(class):

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() 可以共享一些代码。

最佳答案

这段代码几乎是等价的:

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

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

关于python - 我可以将其表示为生成器/协程吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6428164/

相关文章:

C# API 生成器

c# - Unity UnityWebRequest 没有返回值

c# - Unity3D协程编译错误

python - Django 将 sqlite3 db 迁移到 postgres 查询整数 : "none" error 的无效输入语法

python - Pytest 失败并出现 AssertionError False is False

python - 为什么 numpy 的 fromiter 函数需要指定 dtype 而其他数组创建例程不需要?

c# - 在继续使用函数 C# Unity 之前等待协程完成

python - Django:模型类 X 未声明显式 app_label 并且也不在 INSTALLED_APPS 的应用程序中

python - 从行中的多个值计算一个值

javascript - 将值传递给 Symbol.iterator