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

首頁 > 編程 > Python > 正文

python函數(shù)式編程學(xué)習(xí)之yield表達式形式詳解

2020-02-22 23:33:06
字體:
供稿:網(wǎng)友

前言

yield的英文單詞意思是生產(chǎn),剛接觸Python的時候感到非常困惑,一直沒弄明白yield的用法。最近又重新學(xué)習(xí)了下,所以整理了下面這篇文章,供自己和大家學(xué)習(xí)參考,下面話不多說了,來一起看看詳細的介紹吧。

先來看一個例子

def foo(): print("starting...") while True:  res = yield  print("res:",res)g = foo()next(g)

在上面的例子里,因為foo函數(shù)中有yield關(guān)鍵字,所以foo()函數(shù)的執(zhí)行結(jié)果g是一個生成器,此時可以使用next(g)或者g.__next__()方法觸發(fā)生成器的執(zhí)行

程序的執(zhí)行結(jié)果為

starting...

使用next(g)觸發(fā)生成器的執(zhí)行時,程序會按照正常的順序從上向下執(zhí)行,遇到y(tǒng)ield,程序就會暫停

并把yield后面所接的值返回

打印next(g)的執(zhí)行結(jié)果

def foo(): print("starting...") while True:  res = yield  print("res:",res)g = foo()print(next(g))

程序執(zhí)行結(jié)果

starting...None

在上面的例子里,執(zhí)行一次next(g)方法,程序暫停在yield那一行,此時再次調(diào)用next(g),程序會從yield語句那一行繼續(xù)向下運行

修改上面的代碼,多調(diào)用幾次next方法,并打印next方法的返回結(jié)果

def foo(): print("starting...") while True:  res = yield  print("res:",res)g = foo()print(next(g))print("*"*20)print(next(g))

上面這段代碼的執(zhí)行結(jié)果為

starting...None********************res: NoneNone

可以看到,程序確實按猜想的步驟運行,但是上面的程序也有一個很明顯的缺點:那就是上面的代碼沒有任何的實際意義:res的值永遠為None

在實際的開發(fā)中,使用yield表達式形式的目的是yield可以得到一個值,然后yield把這個值賦值給某個變量,這樣才有實際意義

那應(yīng)該怎么操作才能為res變量賦一個值呢??那就是調(diào)用生成器自身的send方法

send方法可以觸發(fā)一次生成器執(zhí)行,同時還可以把send方法的參數(shù)傳遞給yield

修改上面的代碼

def foo(): print("starting...") while True:  res = yield  print("res:",res)g = foo()next(g)print(g.send(5))

程序的執(zhí)行結(jié)果為:

starting...res: 5None

來分析一下上面的代碼的執(zhí)行過程 :

      1.程序開始執(zhí)行以后,因為foo函數(shù)中有yield關(guān)鍵字,所以foo函數(shù)并不會真的執(zhí)行,而是先得到一個生成器g.

      2.直到調(diào)用next方法,foo函數(shù)正式開始執(zhí)行,先執(zhí)行foo函數(shù)中的print方法,然后進入while循環(huán)

      3.程序遇到y(tǒng)ield關(guān)鍵字,程序暫停,此時next(g)語句執(zhí)行完成

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 郁南县| 宝丰县| 花莲市| 滦平县| 晋中市| 绥阳县| 昌宁县| 沽源县| 宣威市| 南城县| 池州市| 汾阳市| 额尔古纳市| 保康县| 英山县| 杭锦旗| 汽车| 宁陕县| 集安市| 姜堰市| 泽普县| 枣强县| 定南县| 申扎县| 怀来县| 广饶县| 金溪县| 大竹县| 称多县| 台南市| 竹溪县| 乐至县| 东乡族自治县| 措勤县| 南和县| 武乡县| 临朐县| 伊吾县| 犍为县| 辽宁省| 比如县|