В моем итераторе отсутствует значение, и я не знаю, почему - PullRequest
0 голосов
/ 14 мая 2018

У меня есть очень простой генератор, где вы можете отправить во время цикла новое значение через обратный вызов yield:

def GenInter(x, y):

    while (x+1 < y):
        callback = (yield x)
        if callback is not None:
            x = callback
        else:
            x += 1

Затем я создаю генератор:

myGen = GenInter(10,25)
* 1006И, наконец, я анализирую его с помощью цикла for.Когда это «15», я хочу перейти непосредственно к «20».
for x in myGen:
    if x == 15:
        myGen.send(20)
    print(x)

Вот результат:

10
11
12
13
14
15
21
22
23

Почему значение «20» отсутствует?

Спасибо за помощь.

Ответы [ 2 ]

0 голосов
/ 14 мая 2018

Как указали @Imreal и @Abarnert, myGen.send(20) возвращает недостающие 20. Вы можете решить свою проблему, изменив итерацию следующим образом:

for x in myGen:
    y = x
    if x == 15:
        y = myGen.send(20)
    print(y)

Возвращает следующий вывод:

10
11
12
13
14
20
21
22
23
0 голосов
/ 14 мая 2018

Проблема в том, что вызов send фактически выполняет итерацию и возвращает значение, а вы ничего не делаете с ним.

Попробуйте это:

print(myGen.send(20))

https://repl.it/repls/RuddyConcretePrinters

...