python之yield和yield from理解

2022-07-10 11:24:06 字數 883 閱讀 1725

yield,使用 yield 的函式被稱為生成器(generator),跟普通函式不同的是,生成器是乙個返回迭代器的函式,只能用於迭代操作,在呼叫生成器執行的過程中,每次遇到 yield 時函式會暫停並儲存當前所有的執行資訊,返回 yield 的值, 並在下一次執行 next() 方法時從當前位置繼續執行。呼叫乙個生成器函式,返回的是乙個迭代器物件

def fun(x):

for i in range(x):

yield i

print (list(fun(5)))

>>> [0, 1, 2, 3, 4]

yield from, yield from 後面可以跟「 生成器 元組 列表等可迭代物件和序列,返回也是乙個生成器(generator)

def fun(x):

for i in range(x):

yield i

def fun1(x):

yield 'hello'

yield from fun(x)

yield from ['a','b','c','d']

yield from range (10,15)

print (list(fun1(5)))

>>> ['hello', 0, 1, 2, 3, 4, 'a', 'b', 'c', 'd', 10, 11, 12, 13, 14]

個人理解:yield把返回來的值組合成乙個生成器,而yield from則把返回的可迭代物件(生成器,元組,列表等)組合成乙個大的生成器

Python基礎學習之六yield

協程的底層架構是在pep342 中定義,並在python2.5 實現的。python2.5 中,yield關鍵字可以在表示式中使用,而且生成器api中增加了 send value 方法。生成器可以使用.send 方法傳送資料,傳送的資料會成為生成器函式中yield表示式的值。協程是指乙個過程,這個過...

Python之生成器(yield)

這裡是一段防爬蟲文字,請讀者忽略。本文原創首發於csdn,作者idys 部落格首頁 生成器函式 迭代器一定是可迭代物件,可迭代物件不一定是迭代器 def inc for i in range 5 yield i print type inc print type inc x inc print ty...

Python中return和yield的區別

在函式中,結束該函式的執行,return 後面的 塊不會執行,返回該函式的執行結果。帶有yield的函式是乙個迭代器,函式返回某個值時,會停留在某個位置,返回函式值後,會在前面停留的位置繼續執行,直到程式結束 該物件可以迭代遍歷和通過next 方法取出物件中的值。比較節約記憶體空間。儲存的是生成資料...