Python 产量表达式

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

我正在阅读这篇文章,我发现以下程序让我感到困惑:

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))

输出以:

开头
  • 数字 = 0
  • 数字 = 1
  • 数字 = 2
  • 数 = 3
  • 数字 = 4
  • 数字 = 5
  • 数字 = 6
  • 数字 = 7
  • 数字 = 8
  • 数字 = 9
  • 数字 = 10
  • 找到一个回文:11
  • 我=11
  • j = 100
  • 数字 = 100
  • 找到一个回文:101
  • j = 无
  • 数字 = 101
  • 数字 = 102
  • 数字 = 103
  • 数字 = 104
  • 数字 = 105
  • 数字 = 106

我不明白为什么在找到回文数:101之后,没有出现i = 101并且 j = 1000

python generator
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.