雲計算開發學習筆記:Python3迭代器與生成器

2020-12-08 TechWeb

迭代器

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

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

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

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

字符串,列表或元組對象都可用於創建迭代器:

迭代器對象可以使用常規for語句進行遍歷:

執行以上程序,輸出結果如下:

也可以使用 next() 函數:

執行以上程序,輸出結果如下:

創建一個迭代器

把一個類作為一個迭代器使用需要在類中實現兩個方法 __iter__() 與 __next__() 。

如果你已經了解的面向對象編程,就知道類都有一個構造函數,Python 的構造函數為 __init__(), 它會在對象初始化的時候執行。

__iter__() 方法返回一個特殊的迭代器對象, 這個迭代器對象實現了 __next__() 方法並通過 StopIteration 異常標識迭代的完成。

__next__() 方法(Python 2 裡是 next())會返回下一個迭代器對象。

創建一個返回數字的迭代器,初始值為 1,逐步遞增 1:

執行輸出結果為:

StopIteration

StopIteration 異常用於標識迭代的完成,防止出現無限循環的情況,在 __next__() 方法中我們可以設置在完成指定循環次數後觸發 StopIteration 異常來結束迭代。

在 20 次迭代後停止執行:

執行輸出結果為:

生成器

在 Python 中,使用了 yield 的函數被稱為生成器(generator)。

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

在調用生成器運行的過程中,每次遇到 yield 時函數會暫停並保存當前所有的運行信息,返回 yield 的值, 並在下一次執行 next() 方法時從當前位置繼續運行。

調用一個生成器函數,返回的是一個迭代器對象。

以下實例使用 yield 實現斐波那契數列:

執行以上程序,輸出結果如下:

相關焦點

  • Python數據讀取之生成器(generator)
    Python生成器是創建迭代器的簡單方法。簡單來說,生成器是一個函數,它返回一個我們可以迭代的對象(迭代器),迭代器一次返回一個值較使用列表將所有數據都加載到內存中,生成器節省了大量內存空間。深度學習的數據讀取部分一般都需要使用迭代器。
  • Python 迭代器和 C++ 迭代器,最大的不同竟然是……
    當我初學 Python 的時候,我將迭代器理解為一種能夠放在「for xxx in …」的「…」位置的東西;後來隨著學習的深入,我了解到迭代器就是一種實現了迭代器協議的對象;學習 C++ 時,我了解到迭代器是一種行為和指針類似的對象…事實上,迭代器是一個伴隨著迭代器模式(Iterator Pattern)而生的抽象概念,其目的是分離並統一不同的數據結構訪問其中數據的方式,從而使得各種需要訪問數據結構的函數
  • Python中的迭代器和生成器,模塊和第三方模塊都是些什麼?
    Python我們已經學了很多東西了,今天我們來聊一聊Python中什麼是迭代器和生成器,什麼又是模塊,什麼是第三方模塊。廢話不多說,我們開始吧!開發工具:IDLE (Python 3.7 64-bit) 註:不需要和小編一樣的版本,只要是Python3的版本就可以,語法方面沒有什麼不同的。
  • Python迭代器和生成器,三個練習你絕對能搞定
    1.1 容器1.2 取值3.1 給定一個列表和一個數字,求這個數字的位置3.2 判斷第一個子列是不是第二個的子序列3.3 驗證?但是迭代和枚舉不完全一樣迭代你並不知道總量是多少2、生成器那麼什麼又是生成器,和迭代器又有什麼關係?
  • python中常見的對象辨析(可迭代對象、迭代器對象、生成器對象)
    >2.生成器C.訪問迭代器1.循環遍歷訪問2.使用next()方法訪問next(迭代器,標誌位)當連續調用時,依次返回迭代器的元素,並記錄當前位置(同指針),當超出時無標誌位時會報Stoplteration異常,有標誌位時返回標誌位。
  • Python進階:迭代器與迭代器切片
    在前兩篇關於 Python 切片的文章中,我們學習了切片的基礎用法、高級用法、使用誤區,以及自定義對象如何實現切片用法(相關連結見文末)。本文是切片系列的第三篇,主要內容是迭代器切片。迭代器是 Python 中獨特的一種高級特性,而切片也是一種高級特性,兩者相結合,會產生什麼樣的結果呢?
  • 一文解開可迭代對象和迭代器的神秘面紗
    1.迭代器(Iterator)迭代器表示的是一個數據流,並不表示一個數據實體,我們可以使用next()方法計算下一個數據。或者說,可以使用next()方法的就是迭代器。生成器是迭代器,生成器可以使用下面這種方式生成。
  • Python中可迭代對象、迭代器以及iter函數的兩個用法詳解
    第一個是可迭代對象(Iterable),第二個是迭代器(Iterator),第三個是生成器(Generator),這裡暫且不談生成器。 可迭代對象 列表、元組、字符串、字典等都是可迭代對象,可以使用for循環遍歷出所有元素的都可以稱為可迭代對象(Iterable)。
  • 一周學全Python面試基礎(2)
    本文作為問答基礎篇,將為您提供詳盡的python基礎面試問題和答案列表,以供複習之用,涵蓋了Python的核心概念,應用程式和框架。適用於新生的Python面試問答如果您是剛開始從事軟體開發工作的人,本文可以詳細閱讀。
  • python教程:3個非常有用的內置函數
    *版本中是直接返回list的,但在python3.同filter一樣,在python2.*版本中是直接返回list的,但在python3.*中是返回一個迭代器 3、reduce 語法:reduce(function,iterable) 解釋:把迭代器通過function進行累積計算 用法:function必須包含倆個參數,第一個參數表示初始值,第二個參數表示迭代器的每個元素,如下:
  • Python進階系列4本優質書,豆瓣評分9.5!(附高清PDF網盤下載連結)
    《流暢的python》《流暢的Python》一書致力於幫助Python開發人員挖掘這門語言及相關程序庫的優秀特性,避免重複勞動,同時寫出簡潔、流暢、易讀、易維護,並且具有地道Python風格的代碼。《Python高性能編程》本書主要包含以下主題:計算機內部結構的背景知識、列表和元組、字典和集合、迭代器和生成器、矩陣和矢量計算、並發、集群和工作隊列等。
  • 可現學現用的10個Python技巧
    Dropbox也是用Python開發的。據Dice的研究顯示,Python也是熱門的必備技能之一;從《程式語言人氣指數》來看,它也是世界上最受歡迎的程式語言。一種更好的方法是使用join()函數,如下所示:characters = ['p', 'y', 't', 'h', 'o', 'n'] word = "".join(characters) print(word) # python
  • Python——迭代器的幾個高級用法
    它其實就代表著數組當中[3: ]的切片操作。迭代排列組合我們都知道在C++當中有一個叫做next_permutation的函數,可以傳入一個數組,返回下一個字典序的排列。在Python當中也有同樣的功能,但是是以迭代器的形式使用的。
  • Python基礎教程——批量任務處理神器yield
    Python中有一個特別晦澀難懂的概念,就是生成器和yield。特別地,如果我們使用scrapy框架進行爬蟲開發,就避不開yield這個關鍵詞,所以,我們需要知道yield是什麼。我們今天不解釋概念,直接用下面的圖說話:
  • 雲計算開發學習筆記:Python3匿名函數
    來源:TechWeb.com.cnpython 使用 lambda 來創建匿名函數。所謂匿名,意即不再使用 def 語句這樣標準的形式定義一個函數。之前的例子都沒有示範如何返回數值,以下實例演示了 return 語句的用法:以上實例輸出結果:強制位置參數Python3.8 新增了一個函數形參語法 / 用來指明函數形參必須使用指定位置參數,不能使用關鍵字參數的形式。
  • 5分鐘帶你了解Python2和3的區別|從此不再糾結
    而.sep表示默認用空格區分,而end表示換行,也就是我默認給你換行的1).py3裡面所有額print 都加()print ("hi","python")>>hi python #默認sep為空格換行print ("hi","python",sep="*")>>hi*python
  • 「python學習手冊-筆記」003.數值類型
    003.數值類型本系列文章是我個人學習《python學習手冊(第五版)》的學習筆記,其中大部分內容為該書的總結和個人理解,小部分內容為相關知識點的擴展。非商業用途轉載請註明作者和出處;商業用途請聯繫本人(gaoyang1019@hotmail.com)獲取許可。
  • 0基礎入門Python學習步驟如何安排?
    一、清楚學習目標 無論是學習什麼知識,都要有一個對學習目標的清楚認識。只有這樣才能朝著目標持續前進,少走彎路,從學習中得到不斷的提升,享受python學習計劃的過程。 雖然目前的程式語言有很多,但是基礎語法上的概念,本質上都是相通的。可以做到一通百通。
  • 那些讓人驚豔的Python庫
    python-prompt-toolkit–一個用於構建強大的交互式命令行程序的庫。aws-cli–Amazon Web Services的通用命令行界面。bashplotlib–在終端中進行基本繪圖。caniusepython3–判斷是哪個項目妨礙你你移植到Python3。
  • 坑爹的Python陷阱
    if elem % 3 == 0:...            del lst[idx]...如果在modify_lst函數中print idx, item就可以發現端倪:lst在變短,但idx是遞增的,所以在上面出錯的例子中,當3被刪除之後,6變成了lst的第2個元素(從0開始)。在C++中,如果遍歷容器的時候用迭代器刪除元素,也會有同樣的問題。