標籤:== turn 擷取值 bre 迭代器 color 就是 ble 結果
迭代器iterator
- 可迭代協議—只要含有__iter__方法的,都是可迭代的iterable
- 迭代器協議—內部含有__next__方法和__iter__方法的就是迭代器
- 只要能被for迴圈的資料類型,就一定擁有__iter__方法,for迴圈其實就是在使用迭代器
- 只要是迭代器就一定可以迭代
- 可迭代對象.__iter__() == 迭代器
- 迭代器中的__next__()方法可以一個一個的擷取值
迭代器對象可以使用常規for語句進行遍曆:
list=[1,2,3,4]it = iter(list) # 建立迭代器對象for x in it: print (x, end=" ")
執行以上程式,輸出結果如下:
1 2 3 4
迭代器的好處
- 從容器類型中一個一個的取值,會把所有的值都取到
- 節省記憶體空間
產生器
產生器函數本質上就是我們自己寫的函數
跟普通函數不同的是,產生器是一個返回迭代器的函數,只能用於迭代操作,更簡單點理解產生器就是一個迭代器。
在調用產生器啟動並執行過程中,每次遇到 yield 時函數會暫停並儲存當前所有的運行資訊,返回yield的值。並在下一次執行 next()方法時從當前位置繼續運行。
yield關鍵字
yield關鍵字和return用法相同,只要含有yield關鍵字的函數,都是產生器函數,yield需要寫在函數內部,不可以和return同時使用,產生器函數執行後會得到一個產生器作為傳回值
def generator(): print(1) yield ‘a‘#產生器函數 : 執行之後會得到一個產生器作為傳回值ret = generator()print(ret)print(ret.__next__())
#娃哈哈%idef wahaha(): for i in range(2000000): yield ‘娃哈哈%s‘%icount = 0for i in g: count +=1 print(i) if count > 50: breakfor i in g: count +=1 print(i) if count > 100: break
Learn Python—函數(迭代器、產生器)