題記
本系列目標(biāo)是通過例子由淺入深的理解協(xié)程.
讀者
需要有一定的python基礎(chǔ), 概念部分建議閱讀經(jīng)典書: 流暢的python 或者 查看w3c school 或者 菜鳥教程
基本概念
生成器:只要 Python 函數(shù)的定義體中有 yield 關(guān)鍵字,該函數(shù)就是生成器函數(shù),調(diào)用生成器函數(shù)返回的是生成器對象
yield關(guān)鍵字:總的來說就是:產(chǎn)出和讓步,產(chǎn)出結(jié)果,讓出控制權(quán)
send:send() 方法致使協(xié)程前進(jìn)到下一個(gè)yield 語句,另外,生成器可以作為協(xié)程使用
例子說明
yield的執(zhí)行流程, 并制作了一個(gè)生成器調(diào)用的共同方法print_value
def yield1():
'''
整體解釋:1將作為第一個(gè)send方法的返回值,b是第二個(gè)send方法的參數(shù),
最后的return是作為最后一個(gè)send方法的返回值
'''
# 4.yield1()協(xié)程:阻塞在此,執(zhí)行yield產(chǎn)出結(jié)果為1,把控制權(quán)給主線程
# 9.yield1()協(xié)程:阻塞解除,獲得輸入值2,并賦值給b
b = yield 1
# 10.yield1()協(xié)程:返回b
return b
def yield2():
'''
協(xié)程阻塞在此,執(zhí)行yield產(chǎn)出結(jié)果為None,并交出控制權(quán)給主線程
注: 因?yàn)閥ield后面沒有值,所以是None
'''
yield
# 如果沒有返回值,會return None
pass
def yield3():
yield 1
def print_value(f, args):
try:
# 3.print_value方法:對yield1()協(xié)程執(zhí)行send
# 5.print_value方法:接收yield1()協(xié)程的返回值1,并賦值給b
# 8.print_value方法:對yield1()協(xié)程再次執(zhí)行send,并傳入2
b = f.send(args)
except StopIteration as e:
'''
11.print_value方法:接收yield1()協(xié)程的返回值,
如果是最后一個(gè)迭代,就會進(jìn)入到這個(gè)異常捕獲
'''
print(f'{f.__name__}返回值 {e.value}')
return e.value
else:
# 6.print_value方法:打印b
print(f'{f.__name__}接收 {b}')
'''
1.主線程:`yield1`是生成器函數(shù),`yield1()`調(diào)用生成器函數(shù),
返回生成器對象也可以稱作協(xié)程
'''
ys = [yield1(), yield2(), yield3()]
for y in ys:
# 2.主線程:y是yield1()生成器對象,第一次發(fā)送None
# 12.主線程:y是yield2()生成器對象,第一次發(fā)送None.
# 注:yield2 yield3根yield1差不多所以12步以后的都略過了
print_value(y, None)
# 7.主線程:第二次send參數(shù)為2
print_value(y, 2)
結(jié)果:
yield1接收 1
yield1返回值 2
yield2接收 None
yield2返回值 None
yield3接收 1
yield3返回值 None
審核編輯:劉清
-
生成器
+關(guān)注
關(guān)注
7文章
322瀏覽量
21890 -
python
+關(guān)注
關(guān)注
56文章
4827瀏覽量
86708
發(fā)布評論請先 登錄
請問NICE協(xié)處理器與傳統(tǒng)ocb外設(shè)相比的優(yōu)勢有什么?
NICE協(xié)處理器與傳統(tǒng)ocb外設(shè)相比的優(yōu)勢有什么?
LuatOS協(xié)程深度解析:小白也能10分鐘學(xué)會,代碼效率直接起飛!

10分鐘上手寫代碼,LuatOS協(xié)程輕松掌握!

三協(xié)電機(jī)沖刺北交所上市
進(jìn)程、線程、協(xié)程傻傻分不清?一文帶你徹底扒光它們的\"底褲\"!
萬協(xié)通通過高新技術(shù)企業(yè)復(fù)審
使用TMS320C6416協(xié)處理器:Turbo協(xié)處理器(TCP)

使用TMS320C6416協(xié)處理器:Viterbi協(xié)處理器(VCP)

安達(dá)發(fā)|APS高級排程高級物料需求計(jì)劃

基于APS排程系統(tǒng)的PDM功能

國內(nèi)APS高級排程軟件的全面解析

評論