迭代器 Iterator 基本內容

迭代器 Iterator

學習資料

先介紹一個概念:Iterable(可迭代對象。可以直接作用於for循環的對象。

像集合數據類型(list,tuple,dict,set,str等) 和generator(包括生成器和帶yield的generator function)都是可迭代對象。

那麼,什麼是 Iterator 呢?它和 Iterable 又有什麼區別?

Iterator(迭代器) 是可以被next()函數調用並不斷返回下一個值的對象。

它表示的是一個數據流。我們可以將它看成一個有序序列,但是不能提前知道序列的長度(因爲要被next()調用實現計算下一個數據,直到沒有數據時拋出StopIteration錯誤。)這裏也可以看出,Iterator的計算是惰性的,因爲只有在需要返回下一個數據時,它纔會計算。

Iterator 可以表示一個無限大的數據流,比如全體自然數。這是list做不到滴。

下面就來看看如何使用迭代器。

之前已經學習了判斷可迭代對象的方法,再回顧一下:

>>> from collections import Iterable

>>> isinstance('abc', Iterable)

True

判斷是否爲迭代器的方法類似:

>>> from collections import Iterator

>>> isinstance((x for x in range(10)),Iterator)

True

>>>isinstance('abc',Iterator)   //str不是迭代器,因爲不能用next()調用並返回下一個值。

False

如果要將 Iterable 變成 Iterator,可以用iter()函數:

>>> isinstance(iter('abc'),Iterator)

True

⚠️注意:

Python的for循環,本質上是通過不斷調用next()函數實現的。

舉個例子:

>>> for x in[1,2,3,4]: print(x)

1

2

3

4

實際上完全等價於:

>>> it =iter([1,2,3,4])

>>> while True:

              try:

                  x = next(it)

              except StopIteration:

                  break

7.20 學習打卡

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章