У меня есть эта функция f1 (gen, s), которую я хочу использовать переданный генератор gen, если s положительный, и просто вернуть его без обработки, если 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
Часть, которая не работает, это другая часть, которая возвращает пустой генератор из-за yield next (gen) в первой части оператора if.
Если я закомментирую это в функции 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
Мой вопрос: почему выход в части, которая не должна быть выполнена в этом сценарии, потребляет генератор gen?
И как это исправить?