迭代器指的是迭代取值的工具,迭代是指乙個重複的過程,每一次重複都是基於上一次結果而來,迭代提供了一種通用的不依賴索引的迭代取值方式
但凡內建有__iter__方法的物件,都稱為可迭代物件,可迭代的物件:str,list,tuple,dict,set,檔案物件
1.既內建又__next__方法的物件,執行該方法可以不依賴索引取值
2.又內建有__iter__方法的物件,執行迭代器的__iter__方法得到的依然是迭代器本身
迭代器一定是可迭代物件,可迭代物件不一定是迭代器物件,檔案物件本身就是乙個迭代器物件
例如:執行可迭代物件下的__iter__方法,返回乙個迭代器物件,在通過迭代器物件的__next__方法取值,如果取值次數超過源值的數量就會報錯
執行結果:
for迴圈本質為迭代器迴圈
工作原理:
1.先呼叫in後物件的__iter__方法,將其變成乙個迭代器物件
2.呼叫next(迭代器),將得到的返回值賦值給變數名
3.迴圈往復直到next(迭代器)丟擲異常,for會自動捕捉異常然後結束迴圈
ps:可以從for的角度,分辨但凡可以被for迴圈取值的物件就是可迭代物件
迭代器優點:
1.提供了一種通用不依賴索引的迭代取值方式
2.同一時刻在記憶體中只存在乙個值,更節省記憶體
迭代器缺點:
1.取值不如按照索引的方式靈活,不能取指定的某乙個值,只能往後取,不能往前去
2.無法**迭代器的長度
生成器就是一種自定義的迭代器,本質為迭代器
但凡函式內包含yield關鍵字,呼叫函式不會執行函式體**,會得到乙個返回值,該返回值就是生成器物件
例如:
執行結果:
總結yield:只能在函式內使用
1.yield提供了一種自定義迭代器的解決方案
2.yield可以儲存函式的暫停的狀態
3.yield對比return:相同點,都可以返回值,值得型別與個數沒有限制,不同點:yield可以返回多次值,而return只能返回一次值函式就會結束
PYTHON 迭代器 可迭代物件
通過重複執行的 處理相似的資料集的過程,並且本次迭代的處理資料要依賴上一次的結果繼續往下做,上一次產生的結果為下一次產生結果的初始狀態,如果中途有任何停頓,都不能算是迭代。1 非迭代例子 loop 0 while loop 3 print hello world loop 1 2 迭代例子 loop...
python迭代 可迭代物件與迭代器物件
問題舉例 某軟體要求,從網路抓取各個城市的氣溫資訊,並依次顯示 北京 15 22 上海 18 23 如果一次抓取所有城市氣溫資訊再顯示,顯示第乙個城市的氣溫時會由很長的延時,並且浪費儲存空間,我們期望以 用時訪問 的策略,並且把所有城市的氣溫資訊封裝 到乙個物件裡,可用for語句進行迭代。來個栗子 ...
Python高階 可迭代物件和迭代器
collections模組 總結 1 list 列表 例如 執行結果 2 set 元組 例如 執行結果 3 tuple 集合 例如 執行結果 4 dict 字典 例如 執行結果 5 str 字串 例如 執行結果 6 generator 生成器 例如 執行結果 ps 生成器是典型的迭代器。能夠被nex...