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

首頁 > 編程 > Python > 正文

python特性(六):yield與迭代器生成器

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

迭代器是非常高效的類型,無論是從時間復雜度,還是從空間復雜度。而實現迭代器的代碼雖然簡單,卻也繁瑣。為此,python定義了一個yield關鍵字,專門用來構造迭代器。yield有生成,產生的意思。

yield的功能和return非常類似,它們都只能在方法中使用。不同的是,包含yield語句的方法被稱為生成器方法。當調用生成器方法時,會返回一個生成器對象。

例如,看下面的例子。

def MyGenerator():    yield 1gen = MyGenerator()PRint gen

輸出結果為

<generator object MyGenerator at 0x0000000001D9DD80>

當調用生成器對象的next方法時,會執行生成器方法中的代碼,直至遇到yield語句時,方法的執行過程會被掛起。同時,方法運行的上下文環境會被保存。而next方法的返回值就是yield關鍵字后面表達式的返回值。

例如,下面代碼

print gen.next()執行結果為

1當我們繼續調用next方法時,從上一次掛起的地方開始,繼續執行后面的代碼。直至遇到下一個yield語句。當方法執行完畢,依然沒有遇到yield語句,拋出StopIteration異常。

例如

def MyGenerator():    yield 1    yield 'a'gen = MyGenerator()print gen.next()print gen.next()print gen.next()上面代碼中第1次調用next方法,執行語句yield 1。第2次調用next方法,執行語句yield 'a'。第3次調用next方法時,在方法退出前都沒有遇到yield語句,因此拋出StopIteration異常。

上面介紹的生成器方法的工作機理。在后面的博文中,會逐步介紹生成器方法的一些經典應用。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新余市| 安国市| 张家川| 扎赉特旗| 海宁市| 汾西县| 游戏| 剑川县| 威宁| 通州区| 彭水| 南京市| 金坛市| 苏州市| 阳城县| 盐山县| 崇州市| 拉孜县| 六盘水市| 简阳市| 东乌珠穆沁旗| 和龙市| 枣阳市| 资溪县| 静安区| 长汀县| 刚察县| 睢宁县| 绩溪县| 陆丰市| 博湖县| 永吉县| 和龙市| 洛浦县| 旬邑县| 西丰县| 克拉玛依市| 中山市| 乐山市| 马关县| 怀仁县|