发电机内部功能的意外消耗与产量

时间:2019-06-30 22:19:21

标签: generator python-3.5 yield

我有此函数f1(gen,s),如果s为正,我想使用传递的生成器gen,如果s为负,则不处理就返回它。

def f1(gen, s):
    if s > 0:
        # Additional processing
        while True:
            print('consuming iterator')
            yield next(gen)
    else:
        return gen

print(len(list(f1(range(3), -1))))

Output: 0  

不起作用的部分是else部分,由于if语句第一部分中的yield next(gen)而返回空生成器。
如果我在功能f中将其注释掉,则可以从其他部分获得所需的对象:

def f(gen, s):
    if s > 0:
        # Additional processing
        while True:
            print('consuming iterator')
            # yield next(gen)
    else:
        return gen

print(len(list(f(range(3), -1))))

Output :3

我的问题是:为什么在这种情况下不应该执行的零件的成品率消耗了发电机发电量?
以及如何解决这个问题?

0 个答案:

没有答案