迭代器是訪問集合元素的一種方式
迭代器是一個(gè)可以記住遍歷的位置的對(duì)象
迭代器對(duì)象從集合的第一個(gè)元素開始訪問,直到所有元素被訪問完結(jié)束
迭代器只能向前,不能后退
1.接作用于 for 循環(huán)的數(shù)據(jù)類型有以下幾種:
- 一類是結(jié)合數(shù)據(jù)類型,如
list、 tuple、dict、set、str等- 一類是
generator, 包括生成器和帶yied的generator function這些可以直接作用于 for 循環(huán)的對(duì)象稱為可迭代對(duì)象:Iterable
2.判斷是否可以迭代
可以使用 isinstance() 判斷一個(gè)對(duì)象是否是 iterable 對(duì)象:
In [10]: from collections import Iterable
In [12]: isinstance('asd', Iterable)
Out[12]: True
In [13]: isinstance([], Iterable)
Out[13]: True
In [14]: isinstance({}, Iterable)
Out[14]: True
In [16]: isinstance((x for x in range(10)), Iterable)
Out[16]: True
3.可以被 next() 函數(shù)調(diào)用并不斷返回下一個(gè)值的對(duì)象稱為迭代器:Iterator:
In [4]: from collections import Iterator
In [5]: isinstance((x for x in range(10)), Iterator)
Out[5]: True
In [6]: isinstance([],Iterator)
Out[6]: False
In [7]: isinstance({}, Iterator)
Out[7]: False
In [8]: isinstance('sfhj', Iterator)
Out[8]: False
In [9]: isinstance(345, Iterator)
Out[9]: False
In [10]:
4.Iter() 函數(shù)
生成器都是 Iterator 對(duì)象,但 list、dict、str 雖然是 Interable, 卻不是 Iterator。
把 list、 dict、 str 等 Iterable 變成Iterator 可以使用 inter()函數(shù):
In [17]: from collections import Iterator
In [18]: isinstance(iter([]), Iterator)
Out[18]: True
In [19]: isinstance(iter({}), Iterator)
Out[19]: True
In [21]: isinstance(iter('fsd'), Iterator)
Out[21]: True
總結(jié)
- 凡是可作用于
for循環(huán)的對(duì)象都是Iterable類型 - 凡是可作用于
next()函數(shù)的對(duì)象都是Iterator類型 - 集合數(shù)據(jù)類型如
list、dict、str等Iterable但不是Iterator, 不過可以通過iter()函數(shù)獲得一個(gè)Iterator對(duì)象