激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - 淺談Python生成器generator之next和send的運行流程(詳解)

淺談Python生成器generator之next和send的運行流程(詳解)

2020-10-07 22:14Python教程網 Python

下面小編就為大家帶來一篇淺談Python生成器generator之next和send的運行流程(詳解)。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

對于普通的生成器,第一個next調用,相當于啟動生成器,會從生成器函數的第一行代碼開始執行,直到第一次執行完yield語句(第4行)后,跳出生成器函數。

然后第二個next調用,進入生成器函數后,從yield語句的下一句語句(第5行)開始執行,然后重新運行到yield語句,執行后,跳出生成器函數,后面再次調用next,依次類推。

下面是一個列子:

?
1
2
3
4
5
6
7
8
9
10
def consumer():
  r = 'here'
  for i in xrange(3):
    yield r
    r = '200 OK'+ str(i)
 
c = consumer()
n1 = c.next()
n2 = c.next()
n3 = c.next()

了解了next()如何讓包含yield的函數執行后,我們再來看另外一個非常重要的函數send(msg)。其實next()和send()在一定意義上作用是相似的,區別是send()可以傳遞yield表達式的值進去,而next()不能傳遞特定的值,只能傳遞None進去。因此,我們可以看做c.next() 和 c.send(None) 作用是一樣的。

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

下面來著重說明下send執行的順序。當第一次send(None)(對應11行)時,啟動生成器,從生成器函數的第一行代碼開始執行,直到第一次執行完yield(對應第4行)后,跳出生成器函數。這個過程中,n1一直沒有定義。

下面運行到send(1)時,進入生成器函數,注意這里與調用next的不同。這里是從第4行開始執行,把1賦值給n1,但是并不執行yield部分。下面繼續從yield的下一語句繼續執行,然后重新運行到yield語句,執行后,跳出生成器函數。

即send和next相比,只是開始多了一次賦值的動作,其他運行流程是相同的。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
def consumer():
  r = 'here'
  while True:
    n1 = yield r
    if not n1:
      return
    print('[CONSUMER] Consuming %s...' % n1)
    r = '200 OK'+str(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)

 運行結果:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[PRODUCER] Producing 1...
[CONSUMER] Consuming 1...
[PRODUCER] Consumer return: 200 OK1
[PRODUCER] Producing 2...
[CONSUMER] Consuming 2...
[PRODUCER] Consumer return: 200 OK2
[PRODUCER] Producing 3...
[CONSUMER] Consuming 3...
[PRODUCER] Consumer return: 200 OK3
[PRODUCER] Producing 4...
[CONSUMER] Consuming 4...
[PRODUCER] Consumer return: 200 OK4
[PRODUCER] Producing 5...
[CONSUMER] Consuming 5...
[PRODUCER] Consumer return: 200 OK5

以上這篇淺談Python生成器generator之next和send的運行流程(詳解)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持服務器之家。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 免费播放欧美毛片 | 成人福利电影在线观看 | 国产精品麻豆91 | 欧美视频网 | 草免费视频 | 国产精品午夜未成人免费观看 | www成人在线观看 | 日韩欧美电影一区二区三区 | 19禁国产精品福利视频 | 国产在线久 | 免费a级网站 | 深夜免费观看视频 | 一级国产精品一级国产精品片 | 亚洲视频在线免费看 | 日本道中文字幕 | 免费黄色一级 | 国产一级毛片国语版 | 色猫av| 国产视频在线观看一区二区三区 | 黄视频在线网站 | 国内久久久久 | 久久免费视频3 | 国产成人精品免高潮在线观看 | 欧美日韩国产成人在线 | 久久影院国产精品 | 久久草在线观看视频 | 亚洲视频精选 | 天天夜夜草 | 日本精品久久久一区二区三区 | 欧美日韩国产成人在线 | 91精品国产99久久久久久 | 毛片哪里看| 亚洲国产资源 | 欧美成人黄色小视频 | 永久在线观看电影 | 国产一级做a爱片在线看免 日日草夜夜 | 日韩每日更新 | 一级一级一级毛片 | 欧洲精品久久 | 亚洲草原天堂 | 一级国产电影 |