1. 程式人生 > 其它 >可迭代物件、迭代器、for迴圈本質

可迭代物件、迭代器、for迴圈本質

目錄

一. 可迭代物件

1. 迭代

迭代即更新換代 每次的更新都必須依賴於上一次的結果

迭代其實給我們提供了一種不依賴索引取值的方式

2. 可迭代物件

內建有__iter__方法的都稱之為可迭代物件	
    	內建的意思是可以通過點的方式直接檢視到的
     針對雙下滑線開頭 雙下滑線結尾的方法 最為專業標準的讀法為
    	雙下方法名
    	
    面向物件的時候為了與隱藏變數區分開
i = 12  # 沒有__iter__
f = 11.11  # 沒有__iter__
s = 'jason'  # 有__iter__
l = [111,22,33,4]  # 有__iter__
d = {'username':'jason','pwd':123}  # 有__iter__
t = (11,22,33)  # 有__iter__
se = {11,22,33}  # 有__iter__
b = True  # 沒有__iter__
file = open(r'a.txt','w',encoding='utf8') # 有__iter__
含有__iter__的有
    字串 列表 字典 元組 集合 檔案物件
上述通常為可迭代物件
可迭代物件呼叫__iter__方法會變成迭代器物件(老母豬)

3. 迭代器物件

"""
迭代器物件
    即含有__iter__方法 又含有__next__方法
如何生成迭代器物件
    讓可迭代物件執行__iter__方法

檔案物件本身即是可迭代物件又是迭代器物件
迭代器物件無論執行多少次__iter__方法 還是迭代器物件(本身)

迭代器給我們提供了不依賴於索引取值的方式
"""
i = 12  # 沒有__iter__
f = 11.11  # 沒有__iter__
s = 'jason'  # 轉迭代器前沒有__next__
l = [111,222,333,444]  # 轉迭代器前沒有__next__
d = {'username':'jason','pwd':123}  # 轉迭代器前沒有__next__
t = (11,22,33)  # 轉迭代器前沒有__next__
se = {11,22,33}  # 轉迭代器前沒有__next__
b = True  # 沒有__iter__
file = open(r'a.txt','w',encoding='utf8')  # 有__next__

res = d.__iter__()  # 轉成迭代器物件
print(res.__next__())  # 迭代器物件執行__next__方法其實就是在迭代取值(for迴圈)
print(res.__next__())
print(res.__next__())  # 取完元素之後再取會"報錯"

4. for迴圈的本質

for迴圈內部原理
1.將關鍵字in後面的資料先呼叫_ _ iter _ _方法轉為迭代器物件
2.迴圈執行 _ _ next _ _ 方法
3.取完之後 _ _ next _ _ 會報錯 但是for迴圈會自動捕獲該錯誤並處理

res = 資料.__iter__()
while True:
    檢測程式碼是否會報錯
    res.__next__()
    如果報錯了則自動處理掉並結束while迴圈