我有多个生成器函数,这些函数生成会附加到列表中的对象。有很多重复的代码,是否有可能将其最小化(对于Python 3.5 +)?
生成者:
def gen1(obj):
if obj == 'something':
yield ValueError()
def gen2(obj):
if obj == 'else':
yield ValueError()
value_errors =[]
工作版本,但代码重复:
for exc in gen1(obj):
if isinstance(exc, ValueError):
value_errors.append(exc)
for exc in gen2(obj):
if isinstance(exc, ValueError):
value_errors.append(exc)
不起作用,但没有重复的代码:
generators = [
gen1(obj),
gen2(obj)
]
for yielded in generators:
if isInstance(yielded, ValueError):
value_errors.append(yielded)
)
这不起作用,因为它产生的是发生器而不是发生器的屈服值。可以解决这个问题吗?
答案 0 :(得分:1)
您可能正在寻找itertools.chain()
:https://docs.python.org/3.5/library/itertools.html#itertools.chain
示例:
for yielded in itertools.chain(gen1(obj), gen2(obj)):
if isinstance(yielded, ValueError):
value_errors.append(yielded)
答案 1 :(得分:1)
使用:
for yielded in generators:
for _yielded in yielded:
if isinstance(_yielded, ValueError):
value_errors.append(_yielded)
答案 2 :(得分:0)
[obj for generator in generators for obj in generator]