可迭代物件、迭代器、for迴圈本質
阿新 • • 發佈:2021-11-19
目錄
一. 可迭代物件
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迴圈