我可以将其表达为生成器/协程吗?

发布于 2024-11-16 23:48:34 字数 355 浏览 2 评论 0 原文

假设我有以下类:

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

Suppose I have the following class:

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

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

Is it possible to express it as a single function, using the yield keyword? Suppose I have g = MyGen(). Note that g.next() shouldn't call f(), and g.send(x) shouldn't call X(), but f() and X() could share some code.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

弥枳 2024-11-23 23:48:34

此代码几乎是等效的:

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) >下一个()

This code will be almost equivalent:

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

One difference is that you can't send a value (other than None) to a generator before calling next() for the first time. Another difference is that sending None won't trigger calling f(), since the generator can't distinguish send(None) and next().

菊凝晚露 2024-11-23 23:48:34

Sven 的表述正是要走的路,我只是想补充一点,如果你想了解更多有关 Python 中的生成器、协程等的信息,此网站就是您该去的地方。

Sven's formulation is exactly the way to go, I just wanted to add that if you want to know more about generators, coroutines and such in Python, this site is the place to go.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文