python學習--生成器Generator
阿新 • • 發佈:2017-12-01
size python -- 使用 pan 生成器 實現 叠代器 通過
生成器函數:在函數中如果出現了yield關鍵字,那麽這個函數就是生成器函數,yield的作用就是生成一個generator,生成器函數返回一個生成器。
實現一個generator:1、把列表的[ ]換成(),就創建了一個generator。
>>> L = [x * x for x in range(10)] >>> L [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] >>> g = (x * x for x in range(10)) >>> g <generator object <genexpr> at 0x1022ef630>
方式2、通過yield關鍵字。如果一個函數定義中包含yield
關鍵字,那麽這個函數就不再是一個普通函數,而是一個generator。
生成器實現了__iter__方法和next()方法。生成器是可叠代對象,也是叠代器。可以作用於for循環。
在Python中構建叠代器有很多開銷; 必須使用__iter__()
和__next__()
方法實現一個類,跟蹤內部狀態,當沒有值被返回時引發StopIteration
異常。
Python生成器是創建叠代器的簡單方法。
1、調用生成器函數,返回一個生成器。
2、調用生成器的next()方法時,生成器才開始執行生成器函數,直到遇到yield時暫停執行(掛起),並且yield的參數將作為此次next方法的返回值。
3、之後每次調用生成器的next方法,生成器將從上次暫停執行的位置恢復執行生成器函數,直到再次遇到yield時暫停,並且同樣的,yield的參數將作為next方法的返回值。
python學習--生成器Generator