生成器函數(shù)代碼:
1 def gen(n): 2 i = 1; 3 sum = 0; 4 while i <= n: 5 ''' 6 方法體1 -- sum求和是1到9的和 7 yield sum 8 sum += i 9 i += 1 10 ''' 11 '''方法體2-- sum求和是1到10的和''' 12 sum += i 13 i += 1 14 yield sum 15 else: 16 print("sum completed!")
調(diào)用代碼:
1 it = gen(10) #獲取一個(gè)迭代器 2 while True: 3 print(next(it)) 4 else: 5 print("next completed!")
過(guò)程分析:
#執(zhí)行流程分析:
#### it = gen(10) 實(shí)際上返回的是一個(gè)迭代器,不會(huì)執(zhí)行g(shù)en函數(shù)
#### 迭代器雖然多次執(zhí)行,但是gen函數(shù)只會(huì)執(zhí)行一次
# test中while循環(huán)中 print(next(it))每執(zhí)行一次,對(duì)應(yīng)到gen(n)函數(shù)中 yield sum語(yǔ)句則停止,后面的語(yǔ)句就停止執(zhí)行,實(shí)際gen(n)上這次的循環(huán)沒(méi)有執(zhí)行完,
# 這時(shí)候返回的值就是sum的值會(huì)被打印出來(lái);
# 第二次再執(zhí)行print(next(it))語(yǔ)句,會(huì)接著上次yield sum語(yǔ)句處執(zhí)行下面的 sum += i語(yǔ)句然后再執(zhí)行到下次循環(huán)的yield sum語(yǔ)句停止,
# 同時(shí)這時(shí)候返回的值也是sum的值同樣會(huì)被打印出來(lái);
方法體1執(zhí)行的最后流程:
#當(dāng)i = 9, 執(zhí)行next(it), sum實(shí)際值為 1 到 8 的和(即是打印的值),next(it)執(zhí)行完畢后 i= 10, sum實(shí)際值為 1 到 9的和
#當(dāng)i = 10, 執(zhí)行next(it), sum實(shí)際值為 1 到 9 的和(即是打印的值),next(it)執(zhí)行完畢后 i= 11, sum實(shí)際值為 1 到 10的和
#當(dāng)i = 11, gen函數(shù)不會(huì)繼續(xù)執(zhí)行,條件不滿足
浙公網(wǎng)安備 33010602011771號(hào)