(一)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