迭代器與可迭代物件的區別,以及iter()函式的使用。

Lotus_Rz發表於2020-10-19

今天我們就來聊一聊迭代器與可迭代物件的區別,那麼什麼是迭代器,什麼又是可迭代物件呢?

迭代器(Iterator):可以被***next()函式***呼叫並不斷返回下一個值的物件稱為迭代器。

可迭代物件(Iterable):集合資料型別,如list、tuple、dict、set、str等,生成器以及帶yield的generator function,這些可以直接作用於***for迴圈***的物件稱為可迭代物件。

接下來我們來看一個小例子,驗證一下 列表,字典,字串,元組,生成器是否為迭代器物件。
在這裡插入圖片描述
執行結果如下:
在這裡插入圖片描述
在分析之前,瞭解一個小知識點:可以使用isinstance(物件,Iterator)判斷物件是否為迭代器

from collections import Iterator
isinstance((x for x in range(10)), Iterator) `

根據迭代器的定義,我們來分析一下結果:生成器不用多說,肯定能被next()函式呼叫;而列表、元組、字典、字串是可迭代物件,為什麼不是迭代器呢?關鍵一點他們不能被next()函式呼叫。

要知道,可迭代物件是與for迴圈掛鉤的,而迭代器是與next()函式掛鉤的。是可迭代物件不一定是迭代器,但,是迭代器一定是可迭代物件,就比如說生成器。

要想將列表,字典,元組,字串轉換為迭代器,使用next()進行訪問。 可以使用 iter()函式。

接著上面的例子來說:
在這裡插入圖片描述
我們把列表g變成迭代器,使用next()函式訪問它,結果如下:
在這裡插入圖片描述由此可見,iter()函式把列表g變成了一個迭代器,剩下的幾個同學們可以自行檢驗。

相關文章