![](../../img/interpret.jpg)
Python 簡易手冊
單元 51 - 產生器運算式
產生器運算式 (generator expression) 是以運算式 (expression) 的方式定義產生器 (generator) ,這樣的運算式類似綜合運算 (comprehension) ,但是必須寫在小括弧中,舉例如下
1 2 3 4 5 6 7 8 9 10 11 12 13 | # 產生器運算式要放在小括弧中 a = (i for i in range(10) if i % 2 != 0) # 印出變數 a 的型態 print(type(a)) # 依序印出 a 的值 for i in a: print(i) # 檔名: yield_demo3.py # 說明: 《Python簡易手冊》的範例 # 網址: http://kaiching.org # 作者: Kaiching Chang # 時間: 2024 年 3 月 |
單元 50 - 產生器介紹產生器的概念,單元 43 - 綜合運算介紹綜合運算,單元 23 - for 陳述介紹如何使用 for 迴圈 (loop) ,單元 38 - 序對與 Range介紹 range 資料型態,這裡判斷奇數是用 if 陳述 (statement) ,單元 20 - if 陳述介紹 if 的用法。
這裡第 2 行就是產生器運算式,然後把產生器指派給變數 a ,第 4 行印出變數 a 的型態,底下依序印出 a 的值,執行結果如下
> python yield_demo3.py |
<class 'generator'> 1 3 5 7 9 |
> |
如果函數的參數 (parameter) 是可迭代的,那可以用產生器運算式建立產生器當引數 (argument) ,例如
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | # 在 sum() 中使用產生器運算式 a = sum(i for i in range(10) if i % 2 != 0) print(a) # 在 max() 中使用產生器運算式 b = max(i for i in range(10) if i % 2 != 0) print(b) # 在 set() 中使用產生器運算式 c = set(i for i in range(10) if i % 2 != 0) print(c) # 檔名: yield_demo4.py # 說明: 《Python簡易手冊》的範例 # 網址: http://kaiching.org # 作者: Kaiching Chang # 時間: 2024 年 3 月 |
產生器就是迭代器的一種,單元 66 - 迭代器會介紹迭代器與可迭代的不同。
內建函數 sum() 回傳引數總和, max() 回傳最大值, set() 回傳用引數建立的集合,此例執行結果如下
> python yield_demo4.py |
25 9 {1, 3, 5, 7, 9} |
> |
參考資料
![](../../img/pydoing.gif)