Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 迭代多个生成器_Python_Python 3.x_Generator - Fatal编程技术网

Python 迭代多个生成器

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

我有多个生成器函数,可以生成附加到列表中的对象。有很多重复的代码,是否有可能将其最小化(对于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)
)
工作版本但代码重复:

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)
使用:


为什么需要生成单个对象的生成器?例如,简化的生成器可能会生成更多的对象