1. 程式人生 > >python3 - 生成器genarator

python3 - 生成器genarator

while 每次 基本上 font 發現 int 使用 ner 永遠

在Python中,這種一邊循環一邊計算的機制,稱為生成器:generator。

生成器保存的是算法,每次調用 next() ,就計算出 下一個元素的值,
直到計算到最後一個元素,沒有更多的元素時,拋出 StopIteration 的異常
當然,這種不斷調用 next() 實在是太變態了,正確的方法是使用 for 循環,因為生成器也是可叠代對象。
所以,我們創建了一個生成器後,基本上永遠不會調用 next() ,
而是通過 for 循環來叠代它,並且不需要關心 StopIteration 異常。

創建生成器的方法:
1、只要把一個列表生成時的[]改為()
2、定義generator的另一種方法。如果一個函數定義中包含yield關鍵字,那麽這個函數就不再是一個普通函數,而是一個generator



用for循環調用generator時,發現拿不到generator的return語句的返回值。如果想要拿到返回值,必須捕獲StopIteration錯誤,返回值包含在StopIteration的value中
while True:
try:
x = next(g)
print("value:%d"%x)
except StopIteration as e:
print("生成器返回值:%s"%e.value)
break

生成器是這樣一個函數,它記住上一次返回時在函數體中的位置。對生成器函數的第二次(或第 n 次)調用跳轉至該函數中間,而上次調用的所有局部變量都保持不變。

生成器不僅“記住”了它數據狀態;生成器還“記住”了它在流控制構造(在命令式編程中,這種構造不只是數據值)中的位置。

生成器的特點:
1、節約內存
2、叠代到下一次的調用時,所使用的參數都是第一次所保留下的,
即是說,在整個所有函數調用的參數都是第一次所調用時保留的,而不是新創建的

python3 - 生成器genarator