Python可迭代的物件與迭代器
iter()函式的作用如下:
如果物件實現了__iter__方法,那麼就呼叫它,獲取一個迭代器。比如:
def __iter__(self): return SentenceIterator(self.words)
如果物件沒有實現__iter__但是實現了__getitem__方法,那麼就建立一個迭代器,嘗試從索引0開始獲取元素。
如果嘗試獲取元素失敗,就會丟擲TypeError異常。
可迭代的物件,就是使用iter()函式判斷,滿足前面2點的物件。
任何Python序列都是可以迭代的,因為它們都實現了__getitem__方法。
從前面iter()函式的作用可以發現,迭代器是從可迭代的物件中獲取的。
如果物件本身是可迭代的,就呼叫__iter__方法獲取一個迭代器。
如果物件不可迭代但是實現了__getitem__方法,那麼就會建立一個迭代器。
比如可以使用iter()函式把列表轉換為迭代器:
>>> test_list = [1, 2, 3] >>> print(type(test_list)) <class 'list'> >>> test_iter = iter(test_list) >>> print(type(test_iter)) <class 'list_iterator'>
迭代器可以使用for迴圈遍歷:
for x in test_iter: print(x)
也可以使用while迴圈遍歷:
while True: try: print(next(test_iter)) except StopIteration: del test_iter break
- next()函式用於獲取迭代器下一個元素。
- 沒有元素了,迭代器會丟擲StopIteration異常。
標準的迭代器介面有兩個方法:
- __next__返回下一個元素。
- __iter__返回self,以便在應該使用可迭代物件的地方使用迭代器,比如for迴圈中。
def __iter__(self): return self
迭代器的準確定義是:迭代器是這樣的物件,它實現了無引數的__next__方法,返回序列中的下一個元素;如果沒有元素了,那麼丟擲StopIteration異常。Python中的迭代器還實現了__iter__方法,因此迭代器也是可以迭代的。
最後,透過對比可以發現,可迭代物件的__iter__返回的是迭代器:
def __iter__(self): return SentenceIterator(self.words)
迭代器的__iter__返回的是self:
class SentenceIterator: def __iter__(self): return self
而且迭代器還需要有__next__方法。
從這一點就能清楚看出它們的區別了。
需要特別注意的是,可迭代的物件一定不能是自身的迭代器,也就是說,可迭代物件必須實現__iter__方法,但是不能實現__next__方法。否則會讓設計模式變得混亂不堪。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69901823/viewspace-2847561/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Python生成器、迭代器、可迭代物件Python物件
- Python之可迭代物件、迭代器、生成器Python物件
- 你知道JavaScript中的可迭代物件與迭代器嗎JavaScript物件
- 可迭代物件、迭代器、生成器物件
- python可迭代物件Python物件
- 搞清楚 Python 的迭代器、可迭代物件、生成器Python物件
- Iterator與Iterable(迭代器與可迭代)
- 迭代器與可迭代物件的區別,以及iter()函式的使用。物件函式
- 可迭代物件 vs 迭代器 vs 生成器物件
- 跟你深入剖析可迭代物件和迭代器的區別與聯絡物件
- 關於python中可迭代物件和迭代器的一些理解Python物件
- Python進階:迭代器與迭代器切片Python
- Python中可迭代物件、迭代器以及iter()函式的兩個用法詳解Python物件函式
- 《python-美藏篇》1.可迭代、迭代器與生成器Python
- 關於我對可迭代物件,迭代器,生成器的一些理解物件
- Python迭代和迭代器詳解Python
- Python 迭代器Python
- Python迭代器Python
- Python:迭代器Python
- Python迭代器與生成器Python
- python中的迭代器Python
- 理解Python的迭代器Python
- PHP 物件迭代PHP物件
- Python基礎(四)——迭代器/物件,生成器Python物件
- 協程與迭代器
- 一文徹底搞懂Python可迭代(Iterable)、迭代器(Iterator)和生成器(Generator)的概念Python
- 深度理解Python迭代器Python
- Python可迭代序列反轉Python
- python學習: Python的迭代器Python
- 史上最全 Python 迭代器與生成器Python
- 17、Python與設計模式–迭代器模式Python設計模式
- 迭代器
- Python——迭代器的高階用法Python
- Python中迭代器的實現Python
- [OI] 指標與迭代器指標
- ES6系列--7. 可迭代協議和迭代器協議協議
- python中的迭代與遞迴Python遞迴
- 迭代器,迭代器塊和資料管道