Python - 有没有办法在子函数中组织一组产量来产生主函数?

Eug*_*ets 11 python yield generator

我有一个python大师的新手问题.

我有一个函数A,它包含很多重复的yield-actions,如下所示:

yield a
yield b
yield c
Run Code Online (Sandbox Code Playgroud)

它看起来像:

def funA():
    …
   yield a
   yield b
   yield c
    …
   yield a
   yield b
   yield c
    …
   yield a
   yield b
   yield c
Run Code Online (Sandbox Code Playgroud)

有没有办法把所有重复的收益率放在函数中并做这样的事情?:

def funA():
    …
   yield funB()
    …
   yield funB()
    …
   yield funB()
Run Code Online (Sandbox Code Playgroud)

更新

yield a
yield b
yield c
Run Code Online (Sandbox Code Playgroud)

这只是一个例子,但在实际应用中,它的更复杂的产量序列在主生成器中重复多次(因此不是关于组织产量的问题),而是关于子生成器.所以我想避免代码重复.

sle*_*ica 20

如果你使用的是最新的和最好的python(> = 3.3),那就是yield from构造.

yield from funB()
Run Code Online (Sandbox Code Playgroud)

它完全符合您的要求:您可以将函数作为子生成器调用,并将其生成的所有内容都回收给您.

如果您使用的是早期版本python,那么我担心您必须手动执行此操作:

for x in funB(): yield x
Run Code Online (Sandbox Code Playgroud)

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

groups = [funA, funB, funC]
for group in groups:
    for item in group():
        yield item
Run Code Online (Sandbox Code Playgroud)