在Python中有条件地使用yield from

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

假设我有一个这样的发电机:

def a(data):
    for val in data:
        yield val

并且说我想将此生成器包装在另一个生成器b中,该生成器仅从a中产生一些值,具体取决于它们的值。 b应该能够将从呼叫者发回的值转发到a。我知道,将生成器包装在另一个生成器中的最新方法是使用yield from语句。类似于:

def b(data):
    yield from val = a(data) if val == "foo"

我知道语法是错误的(只是为了理解这个想法),所以我想知道是否存在使yield from与条件语句一起使用的正确方法。还是我应该使用其他构造?

python generator
2个回答
1
投票

正如您所说,yield from仅用于您要将包装的生成器中的所有内容都传递过来的情况。如果您不希望这样做,则需要手动迭代包装的生成器并执行所需的操作:


0
投票

由于似乎无法将条件合并到a中,所以我通过手动处理我关心的案例解决了这个问题。这就是我最终得到的结果:

© www.soinside.com 2019 - 2024. All rights reserved.