混合函数和生成器

问题描述 投票:1回答:1

因此,我正在编写一个函数,其中在循环体中进行大量处理,有时调用者可能会对某些计算的答案感兴趣。

通常,我只是将结果放入列表中并返回列表,但是在这种情况下,结果太大(每个循环数百MB)。

我写这篇文章时并没有真正考虑,而是期望Python的动态类型可以解决问题,但是以下内容始终是作为生成器创建的。

def mixed(is_generator=False):
    for i in range(5):
        # process some stuff including writing to a file
        if is_generator:
            yield i
    return

由此我有两个问题:

1)范围内是否存在yield关键字是否立即将其对象变成了生成器?

2)是否有一种明智的方式来获得我想要的行为?

2.1)如果否,则其背后的原因是什么? (关于函数和生成器在Python中的工作方式。)

python python-3.x generator
1个回答
1
投票

让我们逐步进行:

1)范围中是否存在yield关键字是否会立即将其对象变成生成器?是

2)是否有一种明智的方式来获得我想要的行为?是的,请参见下面的示例

要做的是包装计算并返回生成器或包含该生成器数据的列表:

def mixed(is_generator=False):
    # create a generator object
    gen = (compute_stuff(i) for i in range(5))
    # if we want just the generator
    if is_generator:
        return gen
    # if not we consume it with a list and return that list
    return list(gen)
© www.soinside.com 2019 - 2024. All rights reserved.