生成器習題1
阿新 • • 發佈:2018-01-03
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(View Codebase))執行之前,整個過程只是定義生成器並沒有執行,循環結束後n=10,然後打印的時候執行了(add(i, 10) for i in (add(i, 10) for i in gen())) 具體過程可根據pycharm裏面的Debug功能查看......
生成器習題1