Python生成器在应有的时候不提供收益

问题描述 投票:-1回答:1

我有一个简化的脚本,可以为我提供一系列数字。我已经在Windows 10下使用Python3.6和Python3.8运行了此程序]

如果脚本以该行运行,则注释掉:pal_gen.send(10 **(digits)),我得到了我所期望的。但是我想在num%10 = 0时更改顺序。

脚本:

def infinite_pal():
num = 0
while True:
    #print(f"num= {str(num)}")
    if num % 10 ==0:
        #if num==20: print(f"Have num of {str(num)}")
        i = (yield num)
        #if num==20: print(i)
        if i is not None:
            num = i
            #print(f"i = {str(i)}   num= {str(num)}")
    num += 1
    if num==112: break

pal_gen = infinite_pal()
for i in pal_gen:
    print(i)
    digits = len(str(i))
    #print(f"result = {str(10 ** (digits))}")
    pal_gen.send(10 ** (digits))

给0,30

我原本希望:0、10、20、20、20等

[当num的值为20时,yield表达式似乎已被调用,但是在pal_gen循环中,从不将值20发送给对i的调用。 num值的确增加到30,并且产生了。 30应该不会出现。

我是否完全误解了.send的作用非常感谢。我可以用另一种方法来做,但是我感到困惑的是,为什么上述方法不起作用。

从一个较早的问题,python generator yield statement not yield,我尝试过-但它仍然不能满足我的期望:

def infinite_pal():
    num = 0
    while True:
    if num % 10 ==0:
        #if num==20: print(f"Have num of {str(num)}")
        i = (yield num)
        #if num==20: print(i)
        if i is not None:
            num = i
            #print(f"i = {str(i)}   num= {str(num)}")
    num += 1

pal_gen = infinite_pal()
i = pal_gen.send(None)
while True:
    print(i)
    digits = len(str(i))
    #print(f"result = {str(10 ** (digits))}")
    i=pal_gen.send(10 ** (digits))
    if i>200: break
python python-3.x generator yield
1个回答
1
投票
© www.soinside.com 2019 - 2024. All rights reserved.