【问题标题】:Reyield a generator重新生成发电机
【发布时间】:2018-02-23 05:20:49
【问题描述】:

我会这样做:

def walk(samples):
    for d in range(samples):
        yield d

def walk200():
    for d in walk(200):
        yield d

但实际上我想要的是这样,使代码更短:

def walk200():
    reyield walk(200)

reyield怎么办?

【问题讨论】:

  • Python 3.x:yield from walk(200)
  • @MosesKoledoye 其中 x >= 3

标签: python generator


【解决方案1】:

Python 3.3 及更高版本:

def walk200():
    yield from walk(200)

对于较低版本,您会被发布的代码卡住。

【讨论】:

    【解决方案2】:

    在您的具体示例中,您可以简单地return walk(200),这将适用于所有 python 版本。 yield from 仅在某些情况下是必需的。

    【讨论】:

    • 有趣。你能澄清一下吗?什么时候需要,为什么需要,什么时候不需要?
    • @dangonfast (1) 如果您在一个函数中有多个 yield 语句并且您只想将其中一些委托给不同的函数,或者更重要的是 (2) 如果您使用生成器作为协程,见stackoverflow.com/questions/9708902/…
    猜你喜欢
    • 2011-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-01
    • 2012-09-11
    • 2012-08-09
    • 2014-03-25
    相关资源
    最近更新 更多