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