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