如何从一个生成器中提取另一个生成器中的所有项目?

2024-10-05 11:22:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图简化一个算法,其中有3个生成器,这样主生成器耦合其他两个生成器来返回结果

def main():
        try:
           # here is some code for which try is required
            while True:
                for _, element in read_events(): # here is the first generator namely `read_events`
                    yield from factory(element)  # here is the second generator namely `factory`
                # HERE is some more code that requires the generator to exit for it to run
        finally:
            pass

这里是我的问题,我如何简化它或更准确地摆脱for循环,使它光滑

编辑:关于try块和while循环的一些澄清


Tags: thetoforreadhereisfactorycode
1条回答
网友
1楼 · 发布于 2024-10-05 11:22:26

您可以使用chain.from_iterablefor循环转换为生成器表达式,尽管我认为这是否使代码 是否可读

from itertools import chain


def main():
    while True:
        yield from chain.from_iterable(factory(e) for _, e in read_events())

您甚至可以使用iter的2参数形式来摆脱while循环。我觉得读起来有点难,但可以说,所有重要的事情都是在表达式的开头“提前”:从应用factory到一系列事件的结果中产生。这些事件的来源是次要的

from operator import itemgetter
from itertools import chain

def main():
    yield from (factory(e) for _, e in chain.from_iterable(iter(read_events, None)))

相关问题 更多 >

    热门问题