迭代器 生成器的區別?

2021-09-20 09:38:04 字數 587 閱讀 3164

迭代器是乙個更抽象的概念,任何物件,如果它的類有 next 方法和 iter 方法返回自己本身,對於 string、list、

dict、tuple 等這類容器物件,使用 for 迴圈遍歷是很方便的。在後台 for 語句對容器物件呼叫 iter()函式,iter()

是 python 的內建函式。iter()會返回乙個定義了 next()方法的迭代器物件,它在容器中逐個訪問容器內元素,next()

也是 python 的內建函式。在沒有後續元素時,next()會丟擲乙個 stopiteration 異常。

生成器(generator)是建立迭代器的簡單而強大的工具。它們寫起來就像是正規的函式,只是在需要返回數

據的時候使用 yield 語句。每次 next()被呼叫時,生成器會返回它脫離的位置(它記憶語句最後一次執行的位置

和所有的資料值)

區別:生成器能做到迭代器能做的所有事,而且因為自動建立了 iter()和 next()方法,生成器顯得特別簡潔,而且

生成器也是高效的,使用生成器表示式取代列表解析可以同時節省記憶體。除了建立和儲存程式狀態的自動方法,當

發生器終結時,還會自動丟擲 stopiteration 異常。

迭代器,生成器的區別

容器 列表 集合 元組 字典 都是可迭代的。可迭代物件中有iter 方法,加上next 方法形成乙個迭代器。在 for迴圈 中用到了迭代器,迭代器有next 方法可以獲取容器中下乙個物件,直到取完容器中的資料,返回 stopiteration 異常。可以使用isinstance 方法判斷乙個物件是否...

生成器 迭代器

最近見天一直在看廖大的python教程,卻發現很多基礎看著很簡單,但卻不會應用,歸根結底還是因為理解不到位,故而又將教程學了一遍,並將自己的理解記錄一下,也方便後面查閱。由於沒有相關程式設計基礎,有些理解可能是錯的,敬請批評指正。想深入具體學習廖大部落格請移步廖雪峰的官方 有時候用迴圈生成列表太過繁...

迭代器,生成器

迭代器 生成器 生成器的第1種實現方式 列表生成式改為生成器 python中yield關鍵字 函式中如果有yield,那麼呼叫這個函式的返回值為生成器。當生成器g呼叫next方法,執行函式,知道遇到yield就停止 再執行next,從上一次停止的地方繼續執行 函式中遇return直接退出,不繼續執行...