python中和生成器協程相關yield from之最詳最強解釋,一看就懂(二)

一. 從列表中yield html

語法形式:yield from <可迭代的對象實例>python

python中的列表是可迭代的, 若是想構造一個生成器逐一產生list中元素,按以前的yield語法,是在生成器內部遍歷該list,每一輪用yiled依次產生一個生成的值。spa

def generator():
    for i in range(5):
        yield i
return 'done'

採用yiled from語法,能夠這樣寫, 每個元素均用yield生成一個值, 是否是更簡單 !code

def generator():
    yield from range(5)
return 'done'

二. 使用子生成器 協程

語法形式:yield from <子生成器>htm

生成器永遠是一個迭代器,因此也可迭代的對象,所以 yield from後面能夠直接跟生成器,好比下面的proxgen, 將直接根據subgen的生成值逐一產生一個一樣的生成值對象

subgen = generator()
def proxygen(): yield from subgen:

三. 獲取子生成器返回值blog

語法形式:rt = yield from 子生成器get

subgen = generator()
def proxygen(): t = yield from subgen: 
print(t)

這裏須要特別注意的是, 在子生成器subgen未執行完成(也就是沒有天然終結或者return返回)以前,yield from前面的賦值語句是不會被執行的,只有子生成器所有執行完成後,此時subgen經過return返回的值就是yield from subgen的返回值'done',這個變量t才真正被賦值爲'done'. 完整代碼以下:generator

def generator(): yield from range(5) return 'done'
    
def proxygen(): t = yield from generator() print(t) for i in proxygen(): print(i)

輸出以下:

0 1
2
3
4 done

能夠看到,在proxygen中打印的'done',直到全部值都生成並打印完成後,最後才輸出。

四. yield from的真正意義 

若是隻是簡單的語法糖式化簡,3.3版本後專門搞個新的yield from語法關鍵字, 彷佛有點小題大做。yield from的真正意義很是牛逼,看下回分解

下一篇 : python中和生成器協程相關的yield from之最詳最強解釋,一看就懂(三)

上一篇:  python中和生成器協程相關的yield之最詳最強解釋,一看就懂(一)

相關文章
相關標籤/搜索