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}
>

參考資料

上一頁 單元 50 - 產生器
回 Python 簡易手冊 首頁
下一頁 單元 52 - global 陳述與 nonlocal 陳述
回 Python 教材首頁
回程式語言教材首頁