1. 程式人生 > >生成器習題1

生成器習題1

eve pla 根據 open display pycharm expr 輸出結果 次循環

預熱

li = [x * x for x in range(10)]
print(li)

li = (x * x for x in range(10))
print(li)
print(list(li))

輸出結果:

技術分享圖片
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
<generator object <genexpr> at 0x0000021F541CBC50>
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
output

寫出下面的代碼的執行結果

def add(s, x):
    return s + x


def gen():
    for i in range(4):
        yield i


base = gen()
for n in [1, 10]:
    base = (add(i, n) for i in base)

print(list(base))

輸出結果

技術分享圖片
[20, 21, 22, 23]
output

分析:

技術分享圖片
base = gen()
這句是將生成器賦值給變量base

for n in [1, 10]:
這句是兩次循環,第一次循環n=1,第二次循環n=10


base = (add(i, n) for i in base)
這句是生成器表達式,也是此處括號裏面的base在第一次循環時候是上面定義的變量base,第二次循環的時候是第一次循環後的結果base
可拆分為:base = (add(i, 10) for i in (add(i, 10) for i in gen()))

因為在print(list(
base))執行之前,整個過程只是定義生成器並沒有執行,循環結束後n=10,然後打印的時候執行了(add(i, 10) for i in (add(i, 10) for i in gen())) 具體過程可根據pycharm裏面的Debug功能查看......
View Code

生成器習題1