我有一个简化的脚本,可以为我提供一系列数字。我已经在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