今天在看其他同事的代碼時(shí),發(fā)現(xiàn)一個(gè)沒使用過的python關(guān)鍵字 :yield
先問了一下同事,聽他說了幾句,有個(gè)模糊的印象,僅僅是模糊而已。于是自己去搜搜資料看。看了半天,逐漸清晰了。不過在工作機(jī)制以及應(yīng)用上還是有點(diǎn)迷茫。嗯,先把初始接觸的印象記下來吧。
yield 簡(jiǎn)單說來就是一個(gè)生成器(Generator)。生成器是這樣一個(gè)函數(shù):它記住上一次返回時(shí)在函數(shù)體中的位置。對(duì)生成器函數(shù)的第二次(或第 n 次)調(diào)用跳轉(zhuǎn)至該函數(shù)中間,而上次調(diào)用的所有局部變量都保持不變。
你看到某個(gè)函數(shù)包含了yield,這意味著這個(gè)函數(shù)已經(jīng)是一個(gè)Generator,它的執(zhí)行會(huì)和其他普通的函數(shù)有很多不同。
可能看到這里還是迷迷糊糊,先看一些實(shí)例吧:
代碼如下:
def test( data_list ):
for x in data_list:
yield x + 1
data = [1,2,3,4]
for y in test( data ):
print y
則輸出結(jié)果為:
2 3 4 5
另外一種用法:
handle = test(data)
handle.next() 輸出 2
handle.next() 輸出 3
handle.next() 輸出 4
handle.next() 輸出 5
handle.next() 則會(huì)報(bào)錯(cuò)
這只是 yield 的初步印象,接下來慢慢摸索吧。
新聞熱點(diǎn)
疑難解答
圖片精選