可迭代物件
for迴圈機制
迭代器生成器
總結type所返回的型別是例項物件的類物件,而isinstance所進行的判斷則包含了例項物件的類物件及其父類。如圖:
可迭代物件、迭代器、生成器所屬的型別分別為collections包裡的iterable, iterator,generator.
實現了__iter__函式的類建立出的例項物件都是可迭代物件。
注意,__iter__函式的返回值須是乙個迭代器。
能用for迴圈迭代的就是可迭代物件嗎?×
來看下面一段**:
顯然例項物件能被for迴圈迭代,但卻不是乙個可迭代物件。
python中的for迴圈,先到要迭代的物件中尋找__iter__函式,若找到了就呼叫它,呼叫結果返回乙個迭代器,for迴圈將不斷地呼叫__iter__函式返回的迭代器的__next__()方法,直到丟擲stopiteration錯誤,如下圖:
若找不到__iter__,則尋找__getitem__方法,其帶有乙個下標引數,for迴圈從0開始呼叫此函式並傳入下標值,知道丟擲indexoutrange錯誤,如上圖。
實現了__iter__ 和__next__函式的例項物件就是迭代器。
具體請看上例
使用yield關鍵字的函式返回值為乙個生成器,其可以在執行到yield關鍵字時「懸停」,等待下一次__next__函式的呼叫,如下圖:
此時加上一行print(it.next())的輸出為:
1.實現了__iter__函式的類建立出的例項物件都是可迭代物件。
2.實現了__iter__ 和__next__函式的例項物件就是迭代器。
3.使用yield關鍵字的函式返回值為乙個生成器。
4.可迭代物件》迭代器》生成器
5.生成器本質上就是乙個迭代器,因為它實現了__iter__()和__next__(),但卻不能說迭代器就是乙個可迭代物件,其兩者之間並沒有包含關係。
6.以上僅為個人觀點,可作參考,但不為答案。
可迭代物件 迭代器,生成器
可迭代物件 iterator 列表 集合 元組 字典 字串 生成器 我們可以使用isintance 判斷乙個物件是否是iterator物件 生成器 通過列表生成式,我們可以直接建立乙個列表,但是,受到記憶體限制,列表容量肯定是有限的,如果我們僅僅需要訪問前面幾個元素,如果列表元素可以按照某種演算法推...
可迭代物件 迭代器 生成器
名詞解釋 可迭代物件 1 遵循了 實現了 迭代器協議的物件。物件內部定義了乙個 iter 方法,以實現迭代器協議 2 列表 元組 字典 字串等等的都不是可迭代物件,當用for迴圈遍歷的時候,其實for先去執行了.iter 方法,將列表 元組 字串等變成乙個可迭代的物件,在進行迭代。iter 下有 n...
迭代,可迭代物件,迭代器,生成器詳解
1.迭代 就是在一些元素中獲取元素的過程或者一種方式 利用迴圈 2.可迭代物件 1.生成器 1.1 列表推導式 將列表推導式外括號換成 小括號 1.2 函式中包含yield關鍵字 2.列表,元組,字串,字典 使用isinstance 語句來判斷是否是可迭代物件 演示 from collections...