Я хочу использовать next
, чтобы пропустить один или несколько элементов, возвращаемых генератором. Вот упрощенный пример, предназначенный для пропуска одного элемента в цикле (в реальном использовании я бы протестировал n
и в зависимости от результата может повторить next()
, а генератор из пакета, который я не контролирую):
def gen():
for i in range(10):
yield i
for g in gen():
n = next(gen())
print(g, n)
Я ожидал, что результат будет
0 1
2 3
и т.п.
Вместо этого я получил
0 0
1 0
и т.п.
Что я делаю неправильно?
Вы создаете новый генератор каждый раз, когда звоните gen()
. Каждый новый генератор начинается с 0.
Вместо этого вы можете вызвать его один раз и получить возвращаемое значение.
def gen():
for i in range(10):
yield i
x = gen()
for g in x:
n = next(x)
print(g, n)