當前位置:編程學習大全網 - 編程語言 - 如何更好地理解python叠代器和生成器,主要區別是什麽

如何更好地理解python叠代器和生成器,主要區別是什麽

打個比方,叠代就像爬樓梯,樓梯的臺階是數據序列中的元素,遍歷叠代就像爬樓梯的雙腳,壹個接著壹個地觸及臺階,該過程就可以想象為遍歷和叠代——腳在遍歷,臺階在叠代。

而叠代器是什麽,個人的理解是叠代器將叠代這種操作從for循環的“枷鎖”中解脫出來,因為for循環遍歷的時候壹旦開啟,就是從頭到尾遍歷壹遍的,就像前面的爬樓梯,如果是使用for循環進行叠代,那麽壹般情況下都是要從第壹級臺階壹直爬到最後壹級臺階,停不下來(除非設置條件,如break、continue之類的),而叠代器不用如此,可以更加靈活,通過next()函數,可以“隨用隨取”,第壹級臺階爬完了,不想爬,就停在那裏,等想爬了就繼續用next()函數。

python的叠代器的這壹特性可以很方便地用來開發可以通關的小 遊戲 ,比起for循環來實在是方便許多,比如下面的 遊戲 實例:

python叠代器,iter()函數,通關 遊戲 實例 - 大器編程

python的生成器generator可以理解成為特殊的叠代器,具備叠代器的上述功能,與叠代器不同的是,生成器往往更多地運用於Python的函數,利用yield關鍵詞將python的函數創建成生成器,如下面的代碼:

代碼解析

函數r()因為yield關鍵詞變成了壹個生成器,並且通過yiled關鍵詞返回壹個值,比如用next(ra)時,while第壹次循環,函數返回0,並停止,當再次使用next(ra)時,函數從yield下面的i += 1處繼續執行。

python生成器最大的作用之壹就是節省程序執行過程中所占用的計算機內存,就像上面的實例代碼。這個可能不明顯,我們舉個更明顯的例子來說明壹下,代碼如下:

代碼解析

我們將上面生成器推導式與列表推導式[ x for x in range(10) ]來進行壹番比較,這個列表推導式為創建壹個[0,1,2,...,9]的列表(如果元素個數多的話就占據很大的內存了),而上面的生成器推導式則不會那樣的列表,而是通過next()函數逐壹生成,比如第壹次用next()時,“才”生成0,並作為返回值返回,第二次用next()函數,“才”生成1,並作為返回值返回,這樣顯然就不會占據太多的內存了,從而使python的程序變得高效壹些。

更多關於生成器的介紹可以參考如下內容:

python的生成器的功能,yield關鍵詞,實例解析 - 大器編程

  • 上一篇:程式設計師必讀的專業書籍推薦
  • 下一篇:職稱計算機應用能力免試條件?
  • copyright 2024編程學習大全網