最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python 生成器協(xié)程運算實例

 更新時間:2017年09月04日 15:18:20   作者:Bigberg  
下面小編就為大家?guī)硪黄猵ython 生成器協(xié)程運算實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

一、yield運行方式

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

def put_on(name):
 print("Hi {}, 貨物來了,準備搬到倉庫!".format(name))
 while True:
  goods = yield
  print("貨物[%s]已經(jīng)被%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

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

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

我們添加next()方法:

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

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

我們再添加一個next():

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

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

小結:

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

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

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

二、send()傳值

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

小結:

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

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

使用send()函數(shù)之前必須使用__next__(),因為先要中斷,當?shù)诙握{用時,才可傳值。

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

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

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

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

相關文章

  • 利用python腳本如何簡化jar操作命令

    利用python腳本如何簡化jar操作命令

    這篇文章主要給大家介紹了關于利用python腳本如何簡化jar操作命令的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-02-02
  • pytorch教程resnet.py的實現(xiàn)文件源碼分析

    pytorch教程resnet.py的實現(xiàn)文件源碼分析

    torchvision.models這個包中包含alexnet、densenet、inception、resnet、squeezenet、vgg等常用的網(wǎng)絡結構,并且提供了預訓練模型,可以通過簡單調用來讀取網(wǎng)絡結構和預訓練模型
    2021-09-09
  • 在Python中使用mongoengine操作MongoDB教程

    在Python中使用mongoengine操作MongoDB教程

    這篇文章主要介紹了在Python中使用mongoengine操作MongoDB教程,包括在Django下的一些使用技巧,需要的朋友可以參考下
    2015-04-04
  • pandas數(shù)據(jù)探索之合并數(shù)據(jù)示例詳解

    pandas數(shù)據(jù)探索之合并數(shù)據(jù)示例詳解

    這篇文章主要為大家介紹了pandas數(shù)據(jù)探索之合并數(shù)據(jù)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • python統(tǒng)計字符的個數(shù)代碼實例

    python統(tǒng)計字符的個數(shù)代碼實例

    在本篇文章里小編給大家整理了關于python統(tǒng)計字符的個數(shù)代碼實例內容,需要的朋友們可以參考下。
    2020-02-02
  • python項目導入open3d后報錯ImportError:DLL load failed:找不到指定的模塊問題

    python項目導入open3d后報錯ImportError:DLL load failed:找不到

    這篇文章主要介紹了python項目導入open3d后報錯ImportError:DLL load failed:找不到指定的模塊問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • python 實現(xiàn)圖片裁剪小工具

    python 實現(xiàn)圖片裁剪小工具

    這篇文章主要介紹了python 實現(xiàn)圖片裁剪小工具的示例,幫助大家更好的利用python處理圖片,感興趣的朋友可以了解下
    2021-02-02
  • Python結合Sprak實現(xiàn)計算曲線與X軸上方的面積

    Python結合Sprak實現(xiàn)計算曲線與X軸上方的面積

    這篇文章主要介紹了Python結合Sprak實現(xiàn)計算曲線與X軸上方的面積,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2023-02-02
  • 基于Python編寫一個DOS命令輔助工具

    基于Python編寫一個DOS命令輔助工具

    在日常系統(tǒng)管理和維護工作中,執(zhí)行DOS(Disk?Operating?System)命令是一項必不可少的任務,下面我們就來看看如何使用Python編寫一個簡單的DOS命令輔助工具,簡化系統(tǒng)管理任務吧
    2024-01-01
  • 詳解如何使用python創(chuàng)建和結束線程

    詳解如何使用python創(chuàng)建和結束線程

    線程的創(chuàng)建和結束是多線程編程中的核心概念之一,在本文中,我們將學習如何使用 Python 創(chuàng)建線程,并探討如何優(yōu)雅地結束線程,需要的朋友可以參考下
    2024-04-04

最新評論

林口县| 古交市| 静安区| 道孚县| 乌苏市| 酒泉市| 汾西县| 元朗区| 江达县| 崇左市| 平潭县| 肃宁县| 丹寨县| 罗山县| 和龙市| 铁岭县| 礼泉县| 上虞市| 鄂伦春自治旗| 淳化县| 东山县| 集安市| 壤塘县| 双城市| 琼海市| 鄂温| 安化县| 观塘区| 济宁市| 黑河市| 德格县| 拜泉县| 揭东县| 宜兰县| 宁国市| 邵东县| 定边县| 城市| 铁力市| 淮阳县| 万山特区|