python生成器yield语句不yield

dat*_*apy 5 python yield generator send

这是我正在运行的代码:

def infinite_Third() -> Generator:
    num = 1
    while True:
        if num % 3 ==0:
            i = (yield num)
            if i is not None:
                num = i
        num += 1 

if __name__=='__main__':
    third_gen = infinite_Third()
    for i in third_gen:
        print(f"it is {i}")          
        if i>1000:
            break    
        third_gen.send(10*i+1) 
Run Code Online (Sandbox Code Playgroud)

我希望看到的结果是:

it is 3
it is 33
it is 333
it is 3333
Run Code Online (Sandbox Code Playgroud)

然而,我真正得到的是:

it is 3
it is 36
it is 366
it is 3666
Run Code Online (Sandbox Code Playgroud)

我认为这可能与send在主代码中使用有关,但无法弄清楚原因。任何人都可以帮忙吗?

Jos*_*ilo 1

跟进我的评论,我修改了你的主循环

  • 首先,我们发送一个None来启动生成器并接收第一个值
  • 之后,我们发送一个值并接收下一个值
if __name__ == '__main__':
    third_gen = infinite_Third()
    i = third_gen.send(None)
    while True:
        print(f"it is {i}")
        i = third_gen.send(10*i+1)
        if i > 1000:
            break
Run Code Online (Sandbox Code Playgroud)