Python 迭代多个生成器
我有多个生成器函数,可以生成附加到列表中的对象。有很多重复的代码,是否有可能将其最小化(对于Python 3.5+) 生成器:Python 迭代多个生成器,python,python-3.x,generator,Python,Python 3.x,Generator,我有多个生成器函数,可以生成附加到列表中的对象。有很多重复的代码,是否有可能将其最小化(对于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 isi
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)
)
工作版本但代码重复:
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)
)
不工作但没有重复代码:
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)
)
这不起作用,因为它生成的生成器不是生成器的生成值。是否可以修复此问题?您可能正在查找
itertools.chain()
:
例如:
for yielded in itertools.chain(gen1(obj), gen2(obj)):
if isinstance(yielded, ValueError):
value_errors.append(yielded)
使用:
为什么需要生成单个对象的生成器?例如,简化的生成器可能会生成更多的对象