生成器和迭代器區別


帶着問題去理解

什么是生成器
生成器與迭代器的區別
為什么使用生成器
如何使用生成器
yeild 與 return的區別

迭代器

Python中一個實現_iter_方法和_next_方法的類對象,就是迭代器。
是一個能記住遍歷位置的對象,遍歷時只能往前,不能后退。迭代器常用方法有 iter() 和 next().
把一個類作為迭代器使用需要在類中實現兩個函數:__iter__() 和 __next__().

生成器

Python 中使用了 yield 的函數稱為生成器,生成器函數返回一個迭代器。
在調用生成器運行的過程中,每次遇到 yield 時函數會暫停並保存當前所有的運行信息,返回 yield 的值, 並在下一次執行 next() 方法時從當前位置繼續運行。
生成器函數自動實現了迭代器協議,能更方便地實現。
生成器函數 和 生成器表達式都可以提供生成器,只需要簡單地將列表推導的中括號替換成圓括號即可

二者區別

1.迭代器是訪問容器的一種方式,也就是說容器已經出現。我們是從已有元素拓印出一份副本,只為我們此次迭代使用。而生成器則是,而生成器則是自己生成元素的。
2.在用法上生成器只需要簡單函數寫法,配合yield就能實現。而迭代器真正開發中很難使用到。我們可以把生成器看做,python給我們提供的特殊接口實現的迭代器。
3.生成器是只能遍歷一次的。

為什么使用生成器

Python使用生成器對延遲操作提供了支持。在需要的時候才產生結果,而不是立即產生結果。
1、節省資源消耗,和聲明序列不同的是生成器在不使用的時候幾乎不占內存,也沒有聲明計算過程!
2、使用的時候,生成器是隨用隨生成,用完即刻釋放,非常高效!
3、可在單線程下實現並發運算處理效果。

yeild 與 return的區別

相同點:都是返回函數執行的結果
不同點:return 在返回結果后結束函數的運行,而yield 則是讓函數變成一個生成器,生成器每次產生一個值(yield語句),函數被凍結,被喚醒后再產生一個值

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM