迭代器的用法:
首先說兩個概念,一個是可迭代的對象,一個是迭代器對象,兩個不同
可迭代的(Iterable):就是可以for循環取數據的,比如字典、列表、元組、字符串等,不可使用next()方法。
迭代器(Iterator),也是可以依次迭代取出數據的對象,在內存空間是這樣存儲的:<list_iterator object at 0x01E35770>占用內存小,並且可以使用next()方法依次取數據
可以使用isinstance()方法來判斷一個對象是可迭代對象還是迭代器對象
比如:
>>> a = [x for x in range(3)] #生成一個列表
>>> from collections import Iterable #導入Iterable模塊
>>> isinstance(a,Iterable) #使用isinstance(“”,Iterable)判斷是否是可迭代的
True #返回True
>>> from collections import Iterator #導入Iterator模塊
>>> isinstance(a,Iterator) #使用isinstance(“”,Iterator)判斷是否是迭代器對象
False #返回False
從上面的結果可以看出來,列表是一個可迭代的對象,但是不是迭代器,同樣的字典,元組,字符串也不是迭代器,另外,數字既不是迭代器對象,也不是可迭代的對象。
那么如何生成迭代器?
使用iter()方法
比如接着上面的 a = [x for x in range(3)],讓b=iter(a)
b就變成了迭代器
>>> b = iter(a)
>>> b
<list_iterator object at 0x029CCD30> #b的返回值 是一個地址
>>> a
[0, 1, 2] #a還是原來的列表
這時候就可以對b使用next()方法來取值了:
>>> next(b) #第一次next(b),返回第一個元素 0
0
>>> next(b) #第二次next(b),返回第二個元素 1
1
>>> next(b) #第三次next(b),返回第三個元素 2
2
>>> next(b) #第四次next(b),列表只有三個元素,此時超出索引范圍next()函數拋出了一個異常StopIteration
Traceback (most recent call last):
File "<pyshell#72>", line 1, in <module>
next(b)
StopIteration