python 可迭代對象——Iterable
Python中經常使用for來對某個對象進行遍曆,此時被遍曆的這個對象就是可迭代對象,像常見的list、tuple、dict、set、str都是。如果給一個準確的定義的話,就是只要它定義了可以返回一個迭代器的iter方法,或者定義了可以支援下標索引的getitem方法,那麼它就是一個可迭代對象。
python 迭代器對象——Iterator
迭代器是通過next()來實現的,每調用一次他就會返回下一個元素,當沒有下一個元素的時候返回一個StopIteration異常,所以實際上定義了這個方法的都算是迭代器。迭代器一定是可迭代對象,反過來則不一定成立。用iter()函數可以把list、dict、str等Iterable變成Iterator
下面通過建立一個迭代器對象來說明:
建立一個Reverse對象,將序列中的對象進行翻轉。
class Reverse(object): def __init__(self, data): self.data = data self.index = len(data) def __iter__(self): return self def __next__(self): if self.index == 0: raise StopIteration self.index -= 1 return self.data[self.index]rev = Reverse([1,2,3,4,5])for x in rev: print(x)
得到結果:
54321
在進行for迴圈時,首先調用iter()方法,得到一個迭代器對象,然後調用該迭代器對象的next()方法,每次返回一個值。
——————————————————————————
建立迭代器的三種方式:
1、定義一個容器,並添加iter()和next()方法(python 2中為next()方法);iter()返回迭代器對象本身,next()返回每次調用 next() 或迭代時的元素;
2、通過iter()將可迭代對象轉換為迭代器;
3、產生器。產生器通過yield語句快速產生迭代器,省略了複雜的iter()和next()方法。