1. 程式人生 > >Python中可迭代物件和迭代器物件的理解

Python中可迭代物件和迭代器物件的理解

Iamlaosong文

我們在用for ... in ...語句迴圈時,in後面跟隨的物件要求是可迭代物件,可以直接作用於for迴圈的物件統稱為可迭代物件(Iterable),如list、tuple、dict、set、str等。

可迭代物件是實現了__iter__()方法的物件,而迭代器(Iterator)則是實現了__iter__()和__next__()方法的物件,可以顯示地獲取下一個元素。這種可以被next呼叫並不斷返回下一個值的物件稱為迭代器。迭代器一定是可迭代物件,反過來則不一定成立。用iter()函式可以把list、dict、str等Iterable變成Iterator,例如:

bb=[x for x in range(10)]

cc=iter(bb)

cc.next()

迴圈變數的值其實可以看著是一次次用next取值的過程,每取一個值,做一次處理。list等物件用於迴圈實際上可以看著是用iter()方法產生一個迭代器,然後迴圈取值。

生成器(generator)就是一個能返回迭代器的函式,其實就是定義一個迭代演算法,可以理解為一個特殊的迭代器。呼叫這個函式就得到一個迭代器,生成器中的yield相當於一個斷點,執行到此返回一個值後暫停,從而實現next取值。