當前位置:成語大全網 - 新華字典 - 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取值。