Python 迭代器和生成器 初探

2021-07-29 18:13:42 字數 1638 閱讀 1670

可迭代物件(iterable)與迭代器(iterator)

官方文件上這樣描述:

生成器

生成器(generator)是建立迭代器的簡單而強大的工具。它們寫起來就像是正規的函式,只是在需要返回資料的時候使用yield語句。每次next()被呼叫時,生成器會返回它脫離的位置(它記憶語句最後一次執行的位置和所有的資料值)。

例子

迭代期間所發生的基本細節:

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

>>> # get the iterator

>>> it = iter(items) # invokes items.__iter__()

>>> # run the iterator

>>> next(it) # invokes it.__next__()

1>>> next(it)

2>>> next(it)

3>>> next(it)

traceback (most recent call last):

file "", line

1, in

stopiteration

>>>

乙個函式中需要有乙個 yield 語句即可將其轉換為乙個生成器。 跟普通函式不同的是,生成器只能用於迭代操作。 下面是乙個實驗,向你展示這樣的函式底層工作機制:

>>> def countdown(n):

... print('starting to count from', n)

...while n > 0:

... yield n

... n -= 1

... print('done!')

...>>> c = countdown(3)

>>> c

0x1006a0af0>

>>> # run to first yield and emit a value

>>> next(c)

starting to count from 3

3>>> # run to the next yield

>>> next(c)

2>>> # run to next yield

>>> next(c)

1>>> # run to next yield (iteration stops)

>>> next(c)

done!

traceback (most recent call last):

file "", line 1, in

stopiteration

>>>

乙個生成器函式主要特徵是它只會回應在迭代中使用到的 next 操作。 一旦生成器函式返回退出,迭代終止。我們在迭代中通常使用的for語句會自動處理這些細節,所以你無需擔心。

《python3-cookbook》中有關迭代器和生成器的介紹

有關迭代,迭代器和生成器的一點點參考

Python迭代器和生成器

先說迭代器,對於string list dict tuple等這類容器物件,使用for迴圈遍歷是很方便的。在後台for語句對容器物件呼叫iter 函式,iter 是python的內建函式。iter 會返回乙個定義了next 方法的迭代器物件,它在容器中逐個訪問容器內元素,next 也是python的...

Python迭代器和生成器

迭代器是訪問集合元素的一種方法 是可以記住遍歷的位置的物件。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問 他有兩個基本的方法,iter 和next 字串,列表或遠足物件都可以用於建立迭代器 list1 1,2,3,4 it1 iter list1 建立迭代器物件 print next ...

python 迭代器和生成器

迭代器是訪問集合元素的一種方式。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退,不過這也沒什麼,因為人們很少在迭代途中往後退。另外,迭代器的一大優點是不要求事先準備好整個迭代過程中所有的元素。迭代器僅僅在迭代到某個元素時才計算該元素,而在這之前或之後,元素可...