欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python 生成器協(xié)程運(yùn)算實(shí)例

 更新時(shí)間:2017年09月04日 15:18:20   作者:Bigberg  
下面小編就為大家?guī)?lái)一篇python 生成器協(xié)程運(yùn)算實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

一、yield運(yùn)行方式

我們定義一個(gè)如下的生成器:

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

當(dāng)我們把一個(gè)函數(shù)通過(guò)yield轉(zhuǎn)換成生成器,直接運(yùn)行函數(shù)是不會(huì)出現(xiàn)結(jié)果返回的。因?yàn)榇藭r(shí)函數(shù)已經(jīng)是個(gè)生成器了,我們要通過(guò)next()來(lái)取得值,并且在遇到y(tǒng)ield時(shí)再次跳出函數(shù)。

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

我們添加next()方法:

def put_on(name):
 print("Hi {}, 貨物來(lái)了,準(zhǔn)備搬到倉(cāng)庫(kù)!".format(name))
 while True:
  goods = yield  #遇到y(tǒng)ield中斷
  print("貨物[%s]已經(jīng)被%s搬進(jìn)倉(cāng)庫(kù)了。"%(goods,name)) #中斷后運(yùn)行部分
 
p = put_on("bigberg")
p.__next__()
 
#輸出
Hi bigberg, 貨物來(lái)了,準(zhǔn)備搬到倉(cāng)庫(kù)!

此時(shí)函數(shù)中斷在 goods = yield 的地方,當(dāng)我們?cè)俅握{(diào)用next()函數(shù)時(shí),函數(shù)只會(huì)運(yùn)行中斷以后的內(nèi)容,即上例中的yield下面部分。

我們?cè)偬砑右粋€(gè)next():

def put_on(name):
 print("Hi {}, 貨物來(lái)了,準(zhǔn)備搬到倉(cāng)庫(kù)!".format(name))
 while True:
  goods = yield
  print("貨物[%s]已經(jīng)被%s搬進(jìn)倉(cāng)庫(kù)了。"%(goods,name))
 
p = put_on("bigberg")
p.__next__()
p.__next__()
 
#輸出
Hi bigberg, 貨物來(lái)了,準(zhǔn)備搬到倉(cāng)庫(kù)!
貨物[None]已經(jīng)被bigberg搬進(jìn)倉(cāng)庫(kù)了。

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

小結(jié):

通過(guò)yield將函數(shù)轉(zhuǎn)換為生成器,需要使用next()方法才能運(yùn)行

yield只是保留函數(shù)的中斷狀態(tài),再次調(diào)用next()會(huì)執(zhí)行yield后面的部分

yield如果沒(méi)有返回值,會(huì)返回一個(gè)None空值

二、send()傳值

def put_on(name):
 print("Hi {}, 貨物來(lái)了,準(zhǔn)備搬到倉(cāng)庫(kù)!".format(name))
 while True:
  goods = yield
  print("貨物[%s]已經(jīng)被%s搬進(jìn)倉(cāng)庫(kù)了。"%(goods,name))
 
p = put_on("bigberg")
p.__next__()
p.send("瓜子")
 
#輸出
Hi bigberg, 貨物來(lái)了,準(zhǔn)備搬到倉(cāng)庫(kù)!
貨物[瓜子]已經(jīng)被bigberg搬進(jìn)倉(cāng)庫(kù)了。

小結(jié):

__next__()只是調(diào)用這個(gè)yield,也可以說(shuō)成是喚醒yield,但是不不會(huì)給yield傳值。

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

使用send()函數(shù)之前必須使用__next__(),因?yàn)橄纫袛?,?dāng)?shù)诙握{(diào)用時(shí),才可傳值。

def put_on(name):
 print("Hi {}, 貨物來(lái)了,準(zhǔn)備搬到倉(cāng)庫(kù)!".format(name))
 while True:
  goods = yield
  print("貨物[%s]已經(jīng)被%s搬進(jìn)倉(cāng)庫(kù)了。"%(goods,name))
 
p = put_on("bigberg")
p.__next__()
p.send("瓜子")
p.send("花生")
p.send("餅干")
p.send("牛奶")
 
#多次調(diào)用send()
Hi bigberg, 貨物來(lái)了,準(zhǔn)備搬到倉(cāng)庫(kù)!
貨物[瓜子]已經(jīng)被bigberg搬進(jìn)倉(cāng)庫(kù)了。
貨物[花生]已經(jīng)被bigberg搬進(jìn)倉(cāng)庫(kù)了。
貨物[餅干]已經(jīng)被bigberg搬進(jìn)倉(cāng)庫(kù)了。
貨物[牛奶]已經(jīng)被bigberg搬進(jìn)倉(cāng)庫(kù)了。

三、單線程實(shí)現(xiàn)并行效果(協(xié)程)

import time
 
 
def put_on(name):
 print("Hi {}, 貨物來(lái)了,準(zhǔn)備搬到倉(cāng)庫(kù)!".format(name))
 while True:
  goods = yield
  print("貨物[%s]已經(jīng)被%s搬進(jìn)倉(cāng)庫(kù)了。"%(goods,name))
 
 
def transfer(name):
 p = put_on('A')
 p2 = put_on('B')
 p.__next__()
 p2.__next__()
 print("%s將貨物送來(lái)了!"%name)
 for i in range(5):
  time.sleep(1)
  print("%s遞過(guò)來(lái)兩件貨物"%name)
  p.send("瓜子")
  p2.send("花生")
 
transfer("bigberg")
 
#輸出
Hi A, 貨物來(lái)了,準(zhǔn)備搬到倉(cāng)庫(kù)!
Hi B, 貨物來(lái)了,準(zhǔn)備搬到倉(cāng)庫(kù)!
bigberg將貨物送來(lái)了!
bigberg遞過(guò)來(lái)兩件貨物
貨物[瓜子]已經(jīng)被A搬進(jìn)倉(cāng)庫(kù)了。
貨物[花生]已經(jīng)被B搬進(jìn)倉(cāng)庫(kù)了。
bigberg遞過(guò)來(lái)兩件貨物
貨物[瓜子]已經(jīng)被A搬進(jìn)倉(cāng)庫(kù)了。
貨物[花生]已經(jīng)被B搬進(jìn)倉(cāng)庫(kù)了。
bigberg遞過(guò)來(lái)兩件貨物
貨物[瓜子]已經(jīng)被A搬進(jìn)倉(cāng)庫(kù)了。
貨物[花生]已經(jīng)被B搬進(jìn)倉(cāng)庫(kù)了。
bigberg遞過(guò)來(lái)兩件貨物
貨物[瓜子]已經(jīng)被A搬進(jìn)倉(cāng)庫(kù)了。
貨物[花生]已經(jīng)被B搬進(jìn)倉(cāng)庫(kù)了。
bigberg遞過(guò)來(lái)兩件貨物
貨物[瓜子]已經(jīng)被A搬進(jìn)倉(cāng)庫(kù)了。
貨物[花生]已經(jīng)被B搬進(jìn)倉(cāng)庫(kù)了。

以上這篇python 生成器協(xié)程運(yùn)算實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Pycharm在創(chuàng)建py文件時(shí),自動(dòng)添加文件頭注釋的實(shí)例

    Pycharm在創(chuàng)建py文件時(shí),自動(dòng)添加文件頭注釋的實(shí)例

    今天小編就為大家分享一篇Pycharm在創(chuàng)建py文件時(shí),自動(dòng)添加文件頭注釋的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • python操作mysql、excel、pdf的示例

    python操作mysql、excel、pdf的示例

    這篇文章主要介紹了python操作mysql、excel、pdf的示例,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-03-03
  • Python通過(guò)遞歸函數(shù)輸出嵌套列表元素

    Python通過(guò)遞歸函數(shù)輸出嵌套列表元素

    這篇文章主要介紹了Python通過(guò)遞歸函數(shù)輸出嵌套列表元素,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • Python Django教程之實(shí)現(xiàn)待辦事項(xiàng)應(yīng)用程序

    Python Django教程之實(shí)現(xiàn)待辦事項(xiàng)應(yīng)用程序

    Django是一個(gè)基于Python Web框架的高級(jí)Web框架,允許快速開發(fā)和干凈,務(wù)實(shí)的設(shè)計(jì)。本文將創(chuàng)建一個(gè)待辦事項(xiàng)應(yīng)用程序,以了解Django的基礎(chǔ)知識(shí),感興趣的可以嘗試一下
    2022-10-10
  • PyQt中使用QtSql連接MySql數(shù)據(jù)庫(kù)的方法

    PyQt中使用QtSql連接MySql數(shù)據(jù)庫(kù)的方法

    這篇文章主要介紹了PyQt中使用QtSql連接MySql數(shù)據(jù)庫(kù)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • 通過(guò)Python收集匯聚MySQL 表信息的實(shí)例詳解

    通過(guò)Python收集匯聚MySQL 表信息的實(shí)例詳解

    這篇文章主要介紹了通過(guò)Python收集匯聚MySQL 表信息的實(shí)例代碼,核心代碼是創(chuàng)建保存數(shù)據(jù)的腳本,收集的功能腳本,代碼簡(jiǎn)單明了,需要的朋友可以參考下
    2021-10-10
  • 跟老齊學(xué)Python之編寫類之二方法

    跟老齊學(xué)Python之編寫類之二方法

    上一講中創(chuàng)建了類,并且重點(diǎn)講述了構(gòu)造函數(shù)以及類實(shí)例,特別是對(duì)那個(gè)self,描述了不少。在講述構(gòu)造函數(shù)的時(shí)候特別提到,init()是一個(gè)函數(shù),只不過(guò)在類中有一點(diǎn)特殊的作用罷了,每個(gè)類,首先要運(yùn)行它,它規(guī)定了類的基本結(jié)構(gòu)。
    2014-10-10
  • 一行Python命令實(shí)現(xiàn)批量加水印

    一行Python命令實(shí)現(xiàn)批量加水印

    工作的時(shí)候,尤其是自媒體工作者,必備水印添加工具以保護(hù)知識(shí)產(chǎn)權(quán)。本文為大家提供了一個(gè)快速加水印的方法:一行Python命令就能實(shí)現(xiàn),快來(lái)了解一下吧
    2022-04-04
  • 使用pandas read_table讀取csv文件的方法

    使用pandas read_table讀取csv文件的方法

    今天小編就為大家分享一篇使用pandas read_table讀取csv文件的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • Python高級(jí)應(yīng)用探索之元編程和并發(fā)編程詳解

    Python高級(jí)應(yīng)用探索之元編程和并發(fā)編程詳解

    Python作為一種簡(jiǎn)單易用且功能強(qiáng)大的編程語(yǔ)言,廣泛應(yīng)用于各個(gè)領(lǐng)域,本文主要來(lái)和大家一起探索一下Python中的優(yōu)化技巧、元編程和并發(fā)編程,希望對(duì)大家有所幫助
    2023-11-11

最新評(píng)論