Python 迭代器


迭代器

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

可迭代對象

以直接作用於 for 循環的數據類型有以下幾種:

  • 一類是集合數據類型,如 list 、 tuple 、 dict 、 set 、 str 等;
  • 一類是 generator ,包括生成器和帶 yield 的generator function

這些可以直接作用於 for 循環的對象統稱為可迭代對象: Iterable

判斷是否可以迭代(Iterable)

​ 可以使用 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 循環,還可以被 next() 函數不斷調用並返回下一個值,直到最后拋出 StopIteration 錯誤表示無法繼續返回下一個值了。

迭代器(Iterator)

​ 可以被next()函數調用並不斷返回下一個值的對象稱為迭代器: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

iter()函數

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

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

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

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

總結

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM