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
只有一個參數時,可以省去小括號。官方文件
---
---
---
沒有留言:
張貼留言