在p中使用两个迭代器

2024-09-29 23:15:31 发布

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

假设我有两个迭代器,我想计算

fancyoperation1(iter1), fancyoperation2(iter2)

通常,我只使用fancyoperation1(iter1), fancyoperation2(iter2)。但是,如果这些迭代器链接到单个源,可能是来自单个迭代器的teed,那么如果不在内存中保留大量临时数据,我就无法做到这一点。在这种情况下,我知道有几种选择:

  • 我可以将fancyoperation1和{}重写为一个同时执行这两个操作的单个函数,但这可能会有大量代码重复,而且我可能不理解或没有这两个函数的源代码。此外,每对操作都需要重新执行此操作。在
  • 我可以用螺纹。同步可能只需在helper函数中编写一次,只要不需要频繁地切换线程,开销可能不会太大。在
  • 我可以在内存中保存很多临时数据。在

不过,我不太喜欢这些选择的缺点。有没有一种方法可以在一个线程中完成我想做的事情,而不重写内容或使用大量内存?我试图用协同程序来实现,但是Python的yield似乎不够强大。在

(我目前没有这个问题,但我想知道如果有问题该怎么办。)


Tags: 数据函数内存代码helper源代码链接情况
1条回答
网友
1楼 · 发布于 2024-09-29 23:15:31

您完全可以使用协同程序来实现这一点,只是稍微不太方便(但从好的方面看,您可以将它们分开,并且可以让大多数代码保持不变)。将花哨的操作更改为无参数,并重复使用yield(as expression)来获取数据,而不是接受参数并对其进行迭代。换言之,改变这一点:

def fancyoperation1(it):
    for x in it:
        ...
    cleanup()

# into something like this

def fancyoperation1():
    while True:
        try:
            x = yield
        except GeneratorExit:
            break
        ...
    cleanup()

当然,如果不需要进行迭代后的清理,那么就更容易了。 您可以这样使用(假设iter1, iter2 = tee(underlying_iter)):

^{pr2}$

相关问题 更多 >

    热门问题