16. 產生器
產生器(generator)用來產生一些資料,但它不是一次產生全部資料,而是呼叫產生器時才產生並回傳一個資料。
(1) 用小括號及comprehension語法建立產生器
以下是一個例子:
第1行的指令並沒有一次就產生數量龐大的資料,而是建立一個產生器。 第3~5行的指令next()用來取得產生器的下一個回傳值。
執行結果:
<generator object at 0x000002404819CC80> 0 1 4
(2) 以函式撰寫產生器
產生器函式可以使用yield指令回傳資料,但產生器在回傳資料後並不會結束,而是等下一次呼叫再產生並回傳一個資料。
以下是一個例子:
第4行的yield指令將回傳一個值,等待下一次呼叫產生器時,將再產生一個值並回傳。
主程式:
第1行的建立一個產生器物件;第4及第5行呼叫產生器並分別回傳得到一個回傳值。
執行結果:
<generator object mygenerator at 0x00000286A6C4CC80> 目前處理的i值: 10 100 目前處理的i值: 11 121
問題
以下的程式產生1萬個fibonacci序列清單,然後再逐個取出並顯示。請將fibonacci_list改成產生器的寫法,達成一樣的結果,但不需要花費大量的記憶空間。
Last updated