迭代器 生成器

2022-05-10 00:57:43 字數 1408 閱讀 8668

1、什麼是迭代

指的是乙個重複的過程,每一次重複成為一次迭代,並且每一次重複的結果是下一次重複的初始值

2、為什麼要有迭代器

對於序列型別:str,list,tuple,可以依賴索引來迭代取值,但是對於dict,set,檔案,python檔案必須為我們提供一種不依賴索引的取值方式--》迭代器

3、可迭代物件

有這個方法obj.__iter__的都是可迭代物件,

上面提到的都可迭代物件

4、迭代器物件:

既有obj.__iter__,obj__next__方法的是迭代器物件,上面提到的只有檔案是迭代器物件

5、總結:

1)可迭代物件不一定是迭代器物件

2)迭代器物件一定是可迭代物件

3)呼叫obj__iter__()方法,得到的是迭代器物件(對於迭代器物件執行__iter__得到的仍然是迭代器物件)

字典可轉換成迭代器物件,不依賴索引取出key

上圖等同於下圖

注意:迭代器d_iter沒有值了,就會丟擲異常stopiteration

6、for迴圈詳解

原理:1)呼叫in後的obj__iter_()

2)k=obj_iter_.next_()

3)捕捉stopiteration 異常,結束迭代

7、迭代器的優缺點:

優點:1)提供一種統一的、不依賴於索引的取值方式,為for迴圈的實現提供了依據

2)迭代器同一時間在記憶體中只有乙個值--》更節省記憶體

缺點:1)只能往後取值,並且是一次性的

2)不能統計值的個數,即長度

二 生成器

1、什麼是生成器?

只要在函式內被出現yield關鍵字,那麼在執行函式就不會執行函式體**,會得到乙個結果,該結果就是生成器

生成器就是迭代器

2、yield的功能:

1)yield為我們提供了一種自定義迭代器物件的方法

2)   yield與retur的區別:

① yield 可以返回多次值

② 函式暫停與再繼續的狀態是有yeild幫我們儲存的

小練習:

生成器 迭代器

最近見天一直在看廖大的python教程,卻發現很多基礎看著很簡單,但卻不會應用,歸根結底還是因為理解不到位,故而又將教程學了一遍,並將自己的理解記錄一下,也方便後面查閱。由於沒有相關程式設計基礎,有些理解可能是錯的,敬請批評指正。想深入具體學習廖大部落格請移步廖雪峰的官方 有時候用迴圈生成列表太過繁...

迭代器,生成器

迭代器 生成器 生成器的第1種實現方式 列表生成式改為生成器 python中yield關鍵字 函式中如果有yield,那麼呼叫這個函式的返回值為生成器。當生成器g呼叫next方法,執行函式,知道遇到yield就停止 再執行next,從上一次停止的地方繼續執行 函式中遇return直接退出,不繼續執行...

迭代器 生成器

迭代器 iter 可迭代物件 下乙個元素的值 next 可迭代物件 類中實現 iter 方法 提供迭代器 實現迭代器 import time class mylistiter object 迭代器類 def init self,data self.data data self.index 0 def...