Python筆記(十六):迭代器

(一)iterable對象和Iterator對象的區別spa

    iterable對象(可迭代的對象):能夠使用for循環,例如:字符串、列表 、字典 、集合等code

    Iterator對象(迭代器):除了能夠用for循環外,還能夠用next()不斷獲取下一個元素.對象

    __iter__() 和__next__()這2個方法都實現了的,就是Iterator。只實現__iter__() 方法的就是iterable。blog

 1 from collections import Iterable
 2 from collections import Iterator
 3 
 4 class peo():
 5 
 6     def __init__(self,x):
 7         self.x = x
 8     def __iter__(self):
 9         return self
10 
11 
12 p = peo([1,2,3,4])
13 
14 print(isinstance(p,Iterable)) #判斷是不是Iterable對象
15 print(isinstance(p,Iterator))

__iter__() 和__next__()2個方法都實現的,纔是迭代器:Iteratorelement

 1 from collections import Iterable
 2 from collections import Iterator
 3 
 4 class peo():
 5 
 6     def __init__(self,x):
 7         self.x = x
 8     def __iter__(self):
 9         return self
10     def __next__(self):
11         return self
12 
13 p = peo([1,2,3,4])
14 
15 print(isinstance(p,Iterable))
16 print(isinstance(p,Iterator))

因此,Iterator對象確定也是iterable對象,但iterable對象卻不必定是Iterator對象。字符串

咱們能夠使用next()不斷獲取Iterator對象的下一個元素,直到拋出StopIteration錯誤it

1 the_iter = iter([1,2,3])
2 
3 print(next(the_iter))
4 print(next(the_iter))
5 print(next(the_iter))
6 
7 print(next(the_iter))

  

(二)for循環的工做方式io

在上面的例子中,實際能夠用for循環.for循環

1 the_iter = iter([1,2,3])
2 
3 
4 for i in the_iter:
5     print(i)

for循環的工做方式:上面這段代碼實際上和下面這段代碼是同樣的class

 1 the_iter = iter([1,2,3])
 2 
 3 
 4 
 5 while True:
 6     try:
 7         element = next(the_iter)
 8         print(element)
 9     except StopIteration:
10         # 若是拋出異常,退出循環
11         break
相關文章
相關標籤/搜索