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)