Python入門之迭代器與生成器的區別

老男孩IT教育機構發表於2021-04-02

  無論你是Python初學者還是愛好者,相信大家都聽說過迭代器與生成器,但是很多同學搞不懂Python迭代器與生成器到底是什麼?它們之間又有什麼樣的關係呢?接下來,小編透過這篇文章為大家介紹一下。

  什麼是迭代器?

  迭代是Python最強大的功能之一,是訪問集合元素的一種方式。

  迭代器是一個可以記住遍歷的位置的物件。

  迭代器物件從集合的第一個元素開始訪問,直到所有的元素被訪問完結束,迭代器只能往前不會後退。

  迭代器有兩個基本的方法:iter()和next()。

  什麼是生成器?

  在Python中,使用了yield的函式被稱為生成器。

  跟普通函式不同的是,生成器是一個返回迭代器的函式,只能用於迭代操作,更簡單點理解生成器就是一個迭代器。

  在呼叫生成器執行的過程中,每次遇到yield時函式會暫停並儲存當前所有的執行資訊,返回yield的值,並在下一次執行next()方法時從當前位置繼續執行。

  呼叫一個生成器函式,返回的是一個迭代器物件。

  迭代器與生成器之間有什麼區別?

  迭代器是一個更抽象的概念,任何物件,如果它的類有NEXTiter方法返回自己本身,對於string、list、dict、tuple 等這類容器物件,使用for迴圈遍歷是很方便的。在後臺For語言對容器物件條用iter()函式,iter()是Python的內建函式。iter()會返回一個定義了next()方法迭代器物件,在容器中逐個訪問容器的元素,next()也是Python的內建函式,next()會丟擲StopIteration異常。

  生成器是創新迭代器的簡單而強大的工具,它們寫起來就好像正則函式,只是在需要返回資料的時候使用yield 語句。

  迭代器協議,物件需要提供next()方法,它要麼返回迭代中的下一項,要麼就引起一個StopIteration異常,終止迭代。

  可迭代物件,實現了迭代器協議物件。list、tuple、dict都是Iterable可迭代的物件,但不是Iterator迭代器物件。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69952527/viewspace-2766372/,如需轉載,請註明出處,否則將追究法律責任。

相關文章