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

首頁 > 編程 > Python > 正文

python 生成器協程運算實例

2020-02-16 10:10:07
字體:
來源:轉載
供稿:網友

一、yield運行方式

我們定義一個如下的生成器:

def put_on(name): print("Hi {}, 貨物來了,準備搬到倉庫!".format(name)) while True:  goods = yield  print("貨物[%s]已經被%s搬進倉庫了。"%(goods,name)) p = put_on("bigberg") #輸出G:/python/install/python.exe G:/python/untitled/study4/test/double.py Process finished with exit code 0

當我們把一個函數通過yield轉換成生成器,直接運行函數是不會出現結果返回的。因為此時函數已經是個生成器了,我們要通過next()來取得值,并且在遇到yield時再次跳出函數。

print(type(p)) #輸出<class 'generator'>

我們添加next()方法:

def put_on(name): print("Hi {}, 貨物來了,準備搬到倉庫!".format(name)) while True:  goods = yield  #遇到yield中斷  print("貨物[%s]已經被%s搬進倉庫了。"%(goods,name)) #中斷后運行部分 p = put_on("bigberg")p.__next__() #輸出Hi bigberg, 貨物來了,準備搬到倉庫!

此時函數中斷在 goods = yield 的地方,當我們再次調用next()函數時,函數只會運行中斷以后的內容,即上例中的yield下面部分。

我們再添加一個next():

def put_on(name): print("Hi {}, 貨物來了,準備搬到倉庫!".format(name)) while True:  goods = yield  print("貨物[%s]已經被%s搬進倉庫了。"%(goods,name)) p = put_on("bigberg")p.__next__()p.__next__() #輸出Hi bigberg, 貨物來了,準備搬到倉庫!貨物[None]已經被bigberg搬進倉庫了。

我們可以第二次next()運行的是yield下面的部分內容,但是并沒有給goods傳值,所以貨物是 None。

小結:

通過yield將函數轉換為生成器,需要使用next()方法才能運行

yield只是保留函數的中斷狀態,再次調用next()會執行yield后面的部分

yield如果沒有返回值,會返回一個None空值

二、send()傳值

def put_on(name): print("Hi {}, 貨物來了,準備搬到倉庫!".format(name)) while True:  goods = yield  print("貨物[%s]已經被%s搬進倉庫了。"%(goods,name)) p = put_on("bigberg")p.__next__()p.send("瓜子") #輸出Hi bigberg, 貨物來了,準備搬到倉庫!貨物[瓜子]已經被bigberg搬進倉庫了。

小結:

__next__()只是調用這個yield,也可以說成是喚醒yield,但是不不會給yield傳值。

send()方法調用yield是,能給yield傳值

使用send()函數之前必須使用__next__(),因為先要中斷,當第二次調用時,才可傳值。

def put_on(name): print("Hi {}, 貨物來了,準備搬到倉庫!".format(name)) while True:  goods = yield  print("貨物[%s]已經被%s搬進倉庫了。"%(goods,name)) p = put_on("bigberg")p.__next__()p.send("瓜子")p.send("花生")p.send("餅干")p.send("牛奶") #多次調用send()Hi bigberg, 貨物來了,準備搬到倉庫!貨物[瓜子]已經被bigberg搬進倉庫了。貨物[花生]已經被bigberg搬進倉庫了。貨物[餅干]已經被bigberg搬進倉庫了。貨物[牛奶]已經被bigberg搬進倉庫了。            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 登封市| 武山县| 石楼县| 津市市| 保亭| 马公市| 永定县| 阳东县| 山西省| 呼伦贝尔市| 积石山| 兴仁县| 永胜县| 连云港市| 永宁县| 鲜城| 安乡县| 海口市| 清水县| 新源县| 凉山| 正宁县| 历史| 乌什县| 广东省| 锦屏县| 满洲里市| 通河县| 山东| 沂水县| 卓资县| 凤台县| 调兵山市| 连山| 曲阜市| 金昌市| 乐至县| 小金县| 浮梁县| 喀喇沁旗| 策勒县|