国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python特性(七):通過生成器函數構造序列對象的迭代器

2019-11-08 01:37:22
字體:
來源:轉載
供稿:網友

在前面的博文中介紹過如何構造序列對象的迭代器。本文將通過生成器函數來重寫這篇博文的代碼。

事實上,一個序列對象的迭代器,依賴于一個整數序列的迭代器。看下面的代碼。

def MyGenerator(len):    start  = 0    while start < len:        yield start        start = start + 1gen = MyGenerator(3)PRint gen.next()print gen.next()print gen.next()print gen.next()當調用第1次next方法時, 會首先執行MyGenerator方法的第1行代碼start = 0。然后進入循環。這里len的值通過參數傳入為3。因此while的條件表達式為真。進入循環后,遇到yield語句,方法的執行過程被掛起。next方法的返回值為start的值,即0。

當調用第2次next方法時,接著上面的掛起點,往下執行start = start + 1語句,start的值變為1。接著又進入while循環的條件判斷,start<len依然為真。因此,又執行yield語句。但是由于start值為1,故而這一次next方法返回的值為1。

第3次next方法的調用類似。

當調用第4次next方法時,while循環的條件判斷start < len為假,while循環結束,MyGenerator方法調用也隨之結束,拋出StopIteration異常。

輸出結果

012Traceback (most recent call last):  File "test.py", line 21, in <module>    print gen.next()StopIteration有了上面的結果,重寫序列對象的迭代器輕而易舉。

def MyGenerator(sequence):    start  = 0    while start < len(sequence):        yield sequence[start]        start = start + 1gen = MyGenerator([1,2,3,'a','b','c'])for i in gen:    print i對比之前迭代器類的代碼,我們可以認識到,yield關鍵字為構造迭代器提供了多大的方便。它使得代碼長度縮減許多,同時也大大增強了可讀性。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 荔波县| 布尔津县| 诸暨市| 兴业县| 平山县| 通州市| 奉节县| 玉溪市| 巴楚县| 东阳市| 富阳市| 平度市| 西畴县| 疏勒县| 江永县| 迁安市| 辛集市| 大悟县| 昌吉市| 于都县| 英吉沙县| 天等县| 平和县| 安达市| 湘乡市| 廊坊市| 安义县| 上饶市| 伊春市| 绵竹市| 中山市| 来宾市| 肥东县| 舒城县| 阆中市| 读书| 泰来县| 皮山县| 江山市| 木兰县| 嘉定区|