首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从从子生成器的生成器

从从子生成器的生成器
EN

Stack Overflow用户
提问于 2012-02-29 23:50:02
回答 2查看 1.1K关注 0票数 8

我想要一些发电机,这些发电机要比其他发电机好。

代码语言:javascript
复制
def gx():
    for i in [1, 2, 3]:
        yield i

def gy():
    for i in [11, 12, 13]:
        yield i

def gz():
    """this should defer to gx and gy to
       generate [1, 2, 3, 11, 12, 13]"""
    for i in gx(): yield i
    for i in gy(): yield i

gz()中的显式循环是实现此目的的唯一方法吗,还是有更好的替代方案?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-29 23:51:53

在当前发布的Python版本中,显式循环是调用子生成器的唯一方法。(我假设您的示例只是一个示例--并不完全是您想要解决的问题。)

Python3.3将为此添加特殊的语法yield from

代码语言:javascript
复制
def gz():
    """this should defer to gx and gy to
       generate [1, 2, 3, 11, 12, 13]"""
    yield from gx()
    yield from gy()

有关更多详细信息,请参阅PEP 380

票数 18
EN

Stack Overflow用户

发布于 2012-02-29 23:51:05

使用itertools.chain

代码语言:javascript
复制
import itertools

gz = itertools.chain(gx(), gy())

chain的文档中,他们通过实现来描述它:

代码语言:javascript
复制
def chain(*iterables):
    for it in iterables:
        for element in it:
            yield element

您也可以从中获得灵感:)

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9502242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档