天天看點

疊代器、生成器

容器:把多個元素組織在一起的資料結構。List/dict/set/tuples….都是容器對象

大多數容器提供某種方式擷取擷取每一個元素,而是可疊代對象(iterable)賦予了容器這種能力,當然并不是所有的容器都是可疊代的。疊代器内部持有一個狀态,該狀态用于記錄目前疊代所在的位置,以友善下次疊代的時候擷取正确的元素。疊代器有一種具體的疊代器類型,比如list_iterator,set_iterator。

1

2

3

4

5

6

7

8

9

10

11

12

13

>>> x = [1, 2, 3]

>>> y = iter(x)

>>> z = iter(x)

>>> next(y)

>>> next(z)

>>> type(x)

<class 'list'>

>>> type(y)

<class 'list_iterator'>

這裡x是一個可疊代對象,y和z是兩個獨立的疊代器(iterator)

,可疊代對象實作了__iter__方法,該方法傳回一個疊代器對象。

Fib既是一個可疊代對象(因為它實作了__iter__方法),又是一個疊代器(因為實作了__next__方法)

任何實作了

__iter__

__next__()

(python2中

next()

)方法的對象都是疊代器,

__iter__

傳回疊代器自身,

__next__

傳回容器中的下一個值,如

生成器其實是一種特殊的疊代器,它不需要再像上面的類一樣寫__iter__()和__next__()方法.函數有yield關鍵字就是生成器。

生成器是一種特殊的疊代器,它的傳回值不是通過return而是用yield。

本文來自部落格園,作者:Iving,轉載請注明原文連結:https://www.cnblogs.com/SAS-T/p/9397938.html