国产探花免费观看_亚洲丰满少妇自慰呻吟_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搬進倉庫了。            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 台东县| 达孜县| 金门县| 黄平县| 鱼台县| 庆云县| 城步| 景谷| 普兰县| 河北省| 忻州市| 云和县| 应城市| 都昌县| 龙海市| 依安县| 无为县| 辽宁省| 九寨沟县| 崇左市| 和顺县| 永顺县| 武平县| 府谷县| 原阳县| 昌都县| 龙泉市| 五寨县| 揭西县| 肃宁县| 西畴县| 姜堰市| 仪征市| 芜湖县| 桐乡市| 奇台县| 黄浦区| 仁怀市| 仁怀市| 城口县| 当雄县|