Python的可迭代物件和迭代器物件

2021-10-05 13:43:08 字數 1294 閱讀 5206

迭代器指的是迭代取值的工具,迭代是指乙個重複的過程,每一次重複都是基於上一次結果而來,迭代提供了一種通用的不依賴索引的迭代取值方式

但凡內建有__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...