python 迭代器

之前學過的list,tuple,dice,set,str,generator(包括生成器和帶yield的generator函數)等都是可被for循環迭代的對象,都統稱爲可迭代對象:Iterable

可使用isinstance()判斷一個對象是否爲Iterable對象

如:

from collections import Iterable
isinstance([],iterable)   ==>True
isinstance('abc',iterable)  ==>True

等其他的實例,如字典,集合等


數字是不是可迭代對象

isinstance(100,iterable)
==結果===False====


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

from collections import iterator
isinstance((x for x in range(10)),Iterator)  ==>True
isinstance([],Iterator)     ==>False



生成器一定是迭代器,迭代器不一定是生成器。。


迭代對象(Iterable)對象轉換成迭代器(Iterator)可使用iter()函數

isinstance(iter('abc'),Iterator) ==>True
isinstance(iter([],Iterator)  ==> True

a = [1,2,3]

iter(a)

print(a)

===結果===<gen......


    在python中迭代器(Iterator)表示的是一個數據流,迭代器對象可以被next()函數調用並返回下一個數據,直到沒有數據時拋出stopIteration錯誤。可以把這個數據流看做是一個有序序列,但不能提前知道序列的長度,只能不斷通過next()函數實現按需計算下一個數據,所以迭代器對象計算是具有惰性的,只有在需要返回下一個數據時它纔會計算。

    Iterator甚至可以表示一個無限大的數據流,如全體自然數,而使用list是永遠不可能存儲全體自然數的。



小結:

    凡是可使用於ofr的對象都是Iterable類型

    凡是可用於next()函數的對象都是Iterator類型

    集合數據類型如list、dict、str等都是Iterable但不是Iterator,不過可以通過iter()函數獲得一個Iterator對象

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

for x in range(5)

    pass

實際上完全等價於

it = tier([0,1,2,3,4])

while True:

    try:

        x = next(i)

    except stopIteration:

        break





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