91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python 生成器 generator

發布時間:2020-06-07 11:19:41 來源:網絡 閱讀:631 作者:moakia 欄目:編程語言

前提條件: 如果函數含有yield就是生成器,執行過程中遇到yield就跳出。

舉例:
def gen():
for i in range(10):
x = yield i
print(x)
g=ge()
print(g.send(None)))
print(g.send(2))
Python 生成器 generator
       先說表達式x = yield i
       如果這個表達式只是x = i, 相信每個人都能理解。即把i的值賦值給了x,而現在等號右邊是一個yield i,所以先要執行yield i,然后才是賦值。
       因為生成器遇到yield就跳出,所以yield把i值返回到了調用者那里。
       這個表達式的下一步操作:賦值。卻因為等號右邊的yield被暫停了,換句話說x = yield i才執行了一半,當調用者通過send(var)回到生成器函數時是回到之前那個賦值表達式被暫停的那里,所以接下來執行x = yield i的另一半,那就是這個賦值操作啦,這個值正是調用者通過send(var)發送進生成器的值。

再舉例:
def consumer():
r = ''
while True:
n = yield r
if not n:
return
print('[CONSUMER] Consuming %s...' % n)
r = '200 OK'

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

c = consumer()
produce(c)
執行結果:
[PRODUCER] Producing 1...
[CONSUMER] Consuming 1...
[PRODUCER] Consumer return: 200 OK
[PRODUCER] Producing 2...
[CONSUMER] Consuming 2...
[PRODUCER] Consumer return: 200 OK
[PRODUCER] Producing 3...
[CONSUMER] Consuming 3...
[PRODUCER] Consumer return: 200 OK
[PRODUCER] Producing 4...
[CONSUMER] Consuming 4...
[PRODUCER] Consumer return: 200 OK
[PRODUCER] Producing 5...
[CONSUMER] Consuming 5...
[PRODUCER] Consumer return: 200 OK

官方說明:
注意到consumer函數是一個generator,把一個consumer傳入produce后:
首先調用c.send(None)啟動生成器;然后,一旦生產了東西,通過c.send(n)切換到consumer執行;consumer通過yield拿到消息,處理,又通過yield把結果傳回;produce拿到consumer處理的結果,繼續生產下一條消息;produce決定不生產了,通過c.close()關閉consumer,整個過程結束。

我的理解:
       請注意produce()函數的最開始的地方是c.send(None),正如上面所說這個操作是初始化generator,并做第一個yield(遇到consumer函數就返回),它是有值的,他的值r為'',如果你執行命令行的話,你會發現結果先空了一行,就是他的功勞。 然后到n=0+1=1,此時執行c.send(1) ,它開始的位置是在給consumer函數中的n賦值,即[CONSUMER] Consuming 1 ,繼續執行命令,此時r被賦值為‘200 ok’ ,因為while True 會一直循環,所以繼續重來,但是生成器遇到yield 會自動跳出,此時跳出結果變成為r=‘200 ok’。
補充知識:
while True :
       只有遇到continue 和break才能跳出循環。在生成器里面遇到yield也能。
if not x:相當于if x is not Noneif not x is None`
在python中 None, False, 空字符串"", 0, 空列表[], 空字典{}, 空元組()都相當于False

參考地址如下:
python
廖雪峰

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

兖州市| 寿光市| 大冶市| 达日县| 甘泉县| 阿克| 大竹县| 荆门市| 涟源市| 绍兴市| 屯留县| 凌云县| 伊春市| 会泽县| 龙南县| 旬阳县| 新竹市| 连城县| 桑植县| 五峰| 多伦县| 竹山县| 新野县| 田林县| 墨竹工卡县| 固始县| 凤凰县| 长乐市| 建瓯市| 鄂托克旗| 五原县| 黄大仙区| 弥渡县| 广宁县| 伊川县| 饶阳县| 陇南市| 太和县| 南宫市| 陆川县| 万荣县|