2017-05-19

使用 Python Generator Expression 產生器

Python Generator Expression 產生器很像 Python List Comprehensions,只是它是 Lazy 的。

Lazy 指的不是在建立物件時,就馬上執行所有計算並產生所有 item,而是「輪到了才計算」。

什麼叫輪到了?用 next() 或 for 呼叫時。

語法

( 加工 a 與 b for a in t1 if 符合這個條件 for b in t2 if 符合那個條件...)
和 List Comprehensions 只有一個不一樣,用小括號取代中括號。

Generator 會紀錄目前的讀取位置,只能一直往前讀,不能回頭,硬是要超過邊界會報錯。

g = (x**2 for x in range(5))
print(next(g)) # 0
print(next(g)) # 1
print(next(g)) # 4
print(next(g)) # 9
print(next(g)) # 16
# print(next(g)) # StopIteration

g = (x**2 for x in range(5))
print(next(g)) # 0
print(next(g)) # 1
for v in g:
    print(v) # 4, 9, 16

應用

g = (x**2 for x in range(5))
print(sum(g)) # 30
    
print(min(x**2 for x in range(5))) # 0
    
print(max(x**2 for x in range(5))) # 16
只有一個參數時,可以省去小括號。

官方文件
---
---
---

沒有留言:

張貼留言