Давайте проследим операцию чуть более внимательно:
def monG(borneinf,bornesup):
while True:
if bornesup < borneinf:
bornesup, borneinf = borneinf, bornesup
borneinf += 1
if borneinf==bornesup:
break
print("TRACE", borneinf, bornesup)
x=(yield borneinf)
if x is not None:
borneinf = x
c = monG(2,10)
print(type(c))
for a in c:
if a==5:
print(c.send(20), "a==5")
print(a)
Это дает нам специальный тег в строке c.send
, а также просмотр непосредственно перед yield
Выход:
<class 'generator'>
TRACE 3 10
3
TRACE 4 10
4
TRACE 5 10
TRACE 11 20
11 a==5
5
TRACE 12 20
12
TRACE 13 20
13
TRACE 14 20
14
TRACE 15 20
15
TRACE 16 20
16
TRACE 17 20
17
TRACE 18 20
18
TRACE 19 20
19
Как указал MisterMiyagi
, yield
возвращает 11, но вы выбросили его. Возможно, вы хотели присвоить это значение a
- хотя путаница с параметрами цикла - это определенный запах кода. Если вы делаете это назначение, вы печатаете 11
вместо 5
на этой итерации.
Я думаю, что ваша основная проблема заключается в том, что вы вмешивались в ваш итерационный поток, вызывая дополнительный yield
внутри цикла. В цикле, который вы кодировали, этот неявный yield
означает, что вы не получите и 5
и 11
на последовательных итерациях.