Python迭代器

<h1>迭代器</h1>

迭代是訪問集合元素的一種方式。迭代器是一個可以記住遍歷的位置的對象。迭代器對象從集合的第一個元素開始訪問,直到所有的元素被訪問完結(jié)束。迭代器只能往前不會后退。

<h2>1. 可迭代對象</h2>

以直接作用于 for 循環(huán)的數(shù)據(jù)類型有以下幾種:

一類是集合數(shù)據(jù)類型,如 list 、 tuple 、 dict 、 set 、 str 等;

一類是 generator ,包括生成器和帶 yield 的generator function。

這些可以直接作用于 for 循環(huán)的對象統(tǒng)稱為可迭代對象: Iterable 。

<h2>2. 判斷是否可以迭代</h2>

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

In [50]: from collections import Iterable

In [51]: isinstance([], Iterable)
Out[51]: True

In [52]: isinstance({}, Iterable)
Out[52]: True

In [53]: isinstance('abc', Iterable)
Out[53]: True

In [54]: isinstance((x for x in range(10)), Iterable)
Out[54]: True

In [55]: isinstance(100, Iterable)
Out[55]: False

而生成器不但可以作用于 for 循環(huán),還可以被 next() 函數(shù)不斷調(diào)用并返回下一個值,直到最后拋出 StopIteration 錯誤表示無法繼續(xù)返回下一個值了。

<h2>3.迭代器</h2>

可以被next()函數(shù)調(diào)用并不斷返回下一個值的對象稱為迭代器:Iterator。

可以使用 isinstance() 判斷一個對象是否是 Iterator 對象:

In [56]: from collections import Iterator

In [57]: isinstance((x for x in range(10)), Iterator)
Out[57]: True

In [58]: isinstance([], Iterator)
Out[58]: False

In [59]: isinstance({}, Iterator)
Out[59]: False

In [60]: isinstance('abc', Iterator)
Out[60]: False

In [61]: isinstance(100, Iterator)
Out[61]: False

<h2>4.iter()函數(shù)</h2>

生成器都是 Iterator 對象,但 list 、 dict 、 str 雖然是 Iterable ,卻不是 Iterator 。

把 list 、 dict 、 str 等 Iterable 變成 Iterator 可以使用 iter() 函數(shù):

In [62]: isinstance(iter([]), Iterator)
Out[62]: True

In [63]: isinstance(iter('abc'), Iterator)
Out[63]: True

<h2>總結(jié)</h2>

凡是可作用于 for 循環(huán)的對象都是 Iterable 類型;
凡是可作用于 next() 函數(shù)的對象都是 Iterator 類型
集合數(shù)據(jù)類型如 list 、 dict 、 str 等是 Iterable 但不是 Iterator ,不過可以通過 iter() 函數(shù)獲得一個 Iterator 對象。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 迭代是訪問集合元素的一種方式。迭代器是一個可以記住遍歷的位置的對象。迭代器對象從集合的第一個元素開始訪問,直到所有...
    youngkun閱讀 659評論 0 0
  • https://zhuanlan.zhihu.com/p/26123333 要完全理解透生成器,需要我們先掌握三個...
    Lauzanhing閱讀 459評論 0 0
  • 直接作用于for循環(huán)的數(shù)據(jù)類型有以下幾種: 一類是集合數(shù)據(jù)類型,如list、tuple、dict、set、str等...
    json_jie閱讀 218評論 0 0
  • 迭代是訪問集合元素的一種方式。迭代器是一個可以記住遍歷的位置的對象。迭代器對象從集合的第一個元素開始訪問,直到所有...
    壁花燒年閱讀 352評論 0 0
  • 轉(zhuǎn)載自:深入講解Python中的迭代器和生成器 在Python中,很多對象都是可以通過for語句來直接遍歷的,例如...
    bobobe閱讀 1,096評論 2 4

友情鏈接更多精彩內(nèi)容