Python有没有办法在子函数中组织一组结果来在主函数之外生成?

2024-09-28 21:59:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个问题要问python专家。在

我有一个函数,它有很多重复的屈服作用,比如:

yield a
yield b
yield c

所以它看起来像:

^{pr2}$

有没有什么方法可以把所有的重复收益率函数化,然后做类似的事情呢?公司名称:

def funA():
    …
   yield funB()
    …
   yield funB()
    …
   yield funB()

更新

yield a
yield b
yield c

这只是一个例子,但在实际应用中,它更复杂的收益序列在主生成器中重复出现一次以上(所以组织收益不是问题),而是子生成器。所以我想避免代码重复。在


Tags: 方法函数名称def公司收益事情例子
2条回答

itertools.chain是您要查找的函数

import itertools

def funA():
    for x in range(10):
        yield x

def funB():
    for x in range(10,20):
        yield x

def funC():
    for x in range(20,30):
        yield x

def funs():
    for x in itertools.chain(funA(), funB(), funC()):
        yield x

print [x for x in funs()]

输出:

^{pr2}$

如果您使用的是最新和最好的python(>;=3.3),则存在^{}构造。在

yield from funB()

它完全符合您的需要:您可以将函数作为子生成器调用,并将它生成的所有内容都返回给您。在

如果您使用的是python的早期版本,那么恐怕您必须手动执行:

^{pr2}$

您可以这样对它们进行分组,以节省空间:

groups = [funA, funB, funC]
for group in groups:
    for item in group():
        yield item

相关问题 更多 >