Python學海無涯路 第17回 迭代器

2021-09-24 08:56:25 字數 1118 閱讀 1039

可迭代物件:實現了迭代器協議的物件

迭代器有兩個基本的方法:iter() 和 next()。

for迴圈的本質:將物件用__iter__轉換成可迭代物件,呼叫其next()方法。

字串、列表、元組、字典、集合、檔案物件,這些都不是可迭代物件,只不過在for迴圈時,呼叫了他們內部的__iter__方法,把它們變成了可迭代物件。

s=

"abc"

iter_test=s.__iter__(

)#遵循迭代器協議,生成可迭代物件

print

(iter_test.__next__())

#輸出a

print

(iter_test.__next__())

#輸出b

print

(iter_test.__next__())

#輸出c

print

(iter_test.__next__())

#丟擲異常stopiteration

對於序列型別,如字串、列表、元組都有下標,可用索引的方式訪問物件元素,例:

l=[1

,2,3

]index=

0while index<

len(l)

print

(l[index]

) index+=

1

但是非序列型別物件,如字典、集合、檔案,上述方法並不太好使。

而for迴圈就是基於迭代器協議提供了乙個統一的可遍歷所有物件的方法。

即在遍歷之前,先呼叫物件的__iter__方法將其轉換成乙個迭代器。然後就可以使用迭代器物件的__next__方法,遍歷迴圈。

dic=

iter_dic=dic.__iter__(

)print

(iter_dic.__next__())

#輸出a,遍歷的是key

print

(iter_dic.__next__())

#輸出b,遍歷的是key

字典用__iter__轉換成可迭代物件,遍歷出的是key的值。

這也說明了,for遍歷字典為什麼遍歷的是key

Python學海無涯路 第08回 函式

3 返回值 def test x y 2 x return y呼叫函式時可使用的正式引數型別 引數須以正確的順序傳入函式。呼叫時的數量必須和宣告時的一樣,不然會出現語法錯誤。使用關鍵字引數允許函式呼叫時引數的順序與宣告時不一致,因為 python 直譯器能夠用引數名匹配引數值。如果引數中還有其他引數...

Python學海無涯路 第12回 map函式

將列表中的每個元素加1,可以使用以下方法 usr bin env python coding utf 8 array num 1 2,3 4 定義乙個函式,數字加1 deffunc add x return x 1def map test func,array ret 定義乙個空列表 for i i...

Python學海無涯路 第23回 time模組

4 時間戳 5 元組 struct time 5.2 將格式化字串轉換為struct time 6 格式化的時間 6.2 將struct time轉化為格式化的時間 6.格式化時間的符號 6.格式化時間的符號 7 其它函式 8 格式相互轉換關係圖 格林尼治和格林威治都是greenwich的音譯叫法。...