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...