成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

怎么使用python生成器中的send()和next()

這篇文章將為大家詳細講解有關(guān)怎么使用python生成器中的send()和next(),文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。

成都創(chuàng)新互聯(lián)公司一直秉承“誠信做人,踏實做事”的原則,不欺瞞客戶,是我們最起碼的底線! 以服務為基礎,以質(zhì)量求生存,以技術(shù)求發(fā)展,成交一個客戶多一個朋友!為您提供網(wǎng)站設計制作、成都做網(wǎng)站、成都網(wǎng)頁設計、小程序開發(fā)、成都網(wǎng)站開發(fā)、成都網(wǎng)站制作、成都軟件開發(fā)、重慶APP開發(fā)是成都本地專業(yè)的網(wǎng)站建設和網(wǎng)站設計公司,等你一起來見證!

在異步IO的使用時,generator是最基本的一個實現(xiàn)方法。python生成器有兩個主要方法,一個是send一個是next。今天我們來看看兩者的用法和聯(lián)系。在每段代碼中,第一個next調(diào)用,相當于啟動生成器,會從生成器函數(shù)的第一行代碼開始執(zhí)行,直到第一次執(zhí)行完yield語句(第4行)后,跳出生成器函數(shù)。然后第二個next調(diào)用,進入生成器函數(shù)后,從yield語句的下一句語句(第5行)開始執(zhí)行,然后重新運行到y(tǒng)ield語句,執(zhí)行后,跳出生成器函數(shù)后面再次調(diào)用next,依次類推。

這里我們用經(jīng)典的生產(chǎn)者-消費者模型舉個例子(摘自廖雪峰的博客)

def consumer():
    r = 0
    for i in xrange(3):
        yield r
        r = '200 OK'+ str(i)

c = consumer()
n1 = c.next()
n2 = c.next()
n3 = c.next()

實際上next()和send()在一定意義上作用是相似的,區(qū)別是send()可以傳遞yield表達式的值進去,而next()不能傳遞特定的值,只能傳遞None進去。因此,我們可以看做c.next() 和 c.send(None) 作用是一樣的。

第一次調(diào)用時,請使用next()語句或是send(None),不能使用send發(fā)送一個非None的值,否則會出錯的,因為沒有Python yield語句來接收這個值。

下面說明下send執(zhí)行的順序。先記住,n1 = yield r這句話是從右往左執(zhí)行的。當?shù)谝淮蝧end(None)(對應11行)時,啟動生成器,從生成器函數(shù)的第一行代碼開始執(zhí)行,直到第一次執(zhí)行完yield(對應第4行)后,跳出生成器函數(shù)。這個過程中,n1一直沒有定義。

運行到send(1)時,進入生成器函數(shù),此時,將yield r看做一個整體,賦值給它并且傳回。此時即相當于把1賦值給n1,但是并不執(zhí)行yield部分。下面繼續(xù)從yield的下一語句繼續(xù)執(zhí)行,然后重新運行到y(tǒng)ield語句,執(zhí)行后,跳出生成器函數(shù)。即send和next相比,只是開始多了一次賦值的動作,其他運行流程是相同的。

def consumer():
    r = 'here'
    while True:
        n1 = yield r   #這里的等式右邊相當于一個整體,接受回傳值
        if not n1:
            return
        print('[CONSUMER] Consuming %s...' % n1)
        r = '%d00 OK' % n1

 def produce(c):
     aa = c.send(None)
     n = 0
     while n < 5:
         n = n + 1
         print('[PRODUCER] Producing %s...' % n)
         r1 = c.send(n)
         print('[PRODUCER] Consumer return: %s' % r1)
     c.close()

 c = consumer()
 produce(c)

運行結(jié)果:

[PRODUCER] Producing 1...
[CONSUMER] Consuming 1...
[PRODUCER] Consumer return: 100 OK
[PRODUCER] Producing 2...
[CONSUMER] Consuming 2...
[PRODUCER] Consumer return: 200 OK
[PRODUCER] Producing 3...
[CONSUMER] Consuming 3...
[PRODUCER] Consumer return: 300 OK
[PRODUCER] Producing 4...
[CONSUMER] Consuming 4...
[PRODUCER] Consumer return: 400 OK
[PRODUCER] Producing 5...
[CONSUMER] Consuming 5...
[PRODUCER] Consumer return: 500 OK

關(guān)于怎么使用python生成器中的send()和next()就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

分享文章:怎么使用python生成器中的send()和next()
地址分享:http://jinyejixie.com/article8/ghheop.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導航、網(wǎng)站收錄、App設計、網(wǎng)站策劃、定制開發(fā)App開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應式網(wǎng)站建設
彭山县| 象州县| 绥棱县| 盐源县| 河曲县| 大庆市| 宿松县| 石台县| 桂林市| 大新县| 大关县| 伊宁市| 伊宁市| 长宁县| 邵阳市| 厦门市| 金山区| 宽城| 扶风县| 达州市| 仙居县| 射阳县| 日土县| 治县。| 昌江| 红安县| 民勤县| 华容县| 镇巴县| 常熟市| 荆门市| 綦江县| 读书| 徐汇区| 光山县| 鹤山市| 革吉县| 深水埗区| 温州市| 中方县| 上高县|