国产探花免费观看_亚洲丰满少妇自慰呻吟_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異常。

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 潮安县| 化隆| 无棣县| 沾化县| 靖州| 托克托县| 天长市| 枣庄市| 奈曼旗| 邢台县| 巫山县| 怀远县| 富民县| 东光县| 洞头县| 云霄县| 武宁县| 梨树县| 灯塔市| 东乡| 历史| 古田县| 遵义市| 竹山县| 蛟河市| 左贡县| 昌乐县| 清新县| 改则县| 保德县| 珠海市| 疏附县| 嘉荫县| 衡南县| 广州市| 枞阳县| 云梦县| 布拖县| 观塘区| 高密市| 平和县|