我正在阅读这篇文章,我发现以下程序让我感到困惑:
def is_palindrome(num):
if num // 10 == 0:
return False
temp = num
reversed_num = 0
while temp != 0:
reversed_num = (reversed_num * 10) + (temp % 10)
temp = temp // 10
if num == reversed_num:
return True
else:
return False
def infinite_palindromes():
num = 0
while True:
if is_palindrome(num):
print("found a palindrome: "+str(num))
j = (yield num)
print("j = "+str(j))
if j is not None:
num = j
print("num = "+str(num))
num +=1
pal_gen = infinite_palindromes()
for i in pal_gen:
print("i = "+str(i))
digits = len(str(i))
pal_gen.send(10 ** (digits))
输出以:
开头我不明白为什么在找到回文数:101之后,没有出现i = 101并且 j = 1000?
在
for i in pal_gen:
的第一次运行中,pal_gen 检测回文11
。之后,生成器在 yield
语句处暂停,并执行循环体。
第二个回文数 111 被
pal_gen.send(10 ** digits)
检测到,这会恢复生成器执行,并将 j
的值设置为 100
。
找到回文111
后,生成器再次暂停,并将控制权传回for i in pal_gen:
循环。
在循环
for i in pal_gen:
的第二次运行中,它恢复生成器的执行,但由于没有任何内容发送到生成器,因此 j
的值是 None
。