迭代對象和迭代器

一、可迭代對象(Iterable)

1.可以直接作用於for循環的對象就是可迭代對象。

2.可直接作用於for循環的數據類型有兩類:

<1>集合數據類型

list、tuple、dict、set、str等

<2>generator

生成器和帶yield的generator function(這兩個在生成器那一文章中進行解釋了)

3.用isinstance()判斷一個對象是不是Itetrable對象

二、迭代器(Iterator)

1.可迭代對象可以有兩種,集合數據類型和生成器,兩種之所以能稱爲可迭代對象是因爲都能直接作用於for循環,但兩者也是有區別的,區別在於生成器那章所講的,生成器可以被next()函數調用並不斷返回下一個值,所以我們也把可以被next()函數調用並不斷返回下一個值的對象稱爲迭代器。

2.可以用isinstance()判斷一個對象是不是Iterator對象。

三、總結

1.可迭代對象是Iterable,迭代器對象是Iterator。

2.list,dict,str等集合數據類型是可迭代對象,因爲可以直接作用for循環,但不是迭代器對象,因爲不能調用next()函數去打印下一個數據。

3.爲什麼listdictstr等數據類型不是Iterator

這是因爲Python的Iterator對象表示的是一個數據流,Iterator對象可以被next()函數調用並不斷返回下一個數據,直到沒有數據時拋出StopIteration錯誤。可以把這個數據流看做是一個有序序列,但我們卻不能提前知道序列的長度,只能不斷通過next()函數實現按需計算下一個數據,所以Iterator的計算是惰性的,只有在需要返回下一個數據時它纔會計算。Iterator甚至可以表示一個無限大的數據流,例如全體自然數。而使用list是永遠不可能存儲全體自然數的。

 

 

 

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