關於Python中的 yield
今天研究一下 python 中的 yield。
首先要明白的是 generator 叫做“迭代器”,是可以用在 for 迴圈中的,包括 生成器 和 帶有 yield 表示式的 generator function.
這裡yield 有兩個優點:
1. 不會把所有資料取出來放進記憶體裡,而是返回一個物件,用多少取多少,節省記憶體空間。
2. 從上一次中斷的地方繼續,不會結束迴圈。
這裡可以想一下你做爬蟲的那個 work_list[],實際上是非常大的,直接用for迴圈去訪問沒有用yield訪問來的科學。
1. yield
yield英文意思是“生產” / "屈服"。其實加了 yield的函式就是一個generator。next() 函式可以讓generator 執行。
這裡看一個例子。
可以看到直接呼叫這個 test() 函式,函式並沒有執行,而是返回了一個 generator 的物件,因為函式裡面有yield表示式。通過next() 函式可以恢復 generator 執行,直到下一個yield 。
可以看到,第一個 next(),函式執行到第一個yield。第二個 next() ,尋找下一個yield,最後沒有yield,會報異常。
next() 和 send(None)
在 generator 這裡,next() 和 send(None) 的作用是一樣的。
next(c) 就相當於 c.send(None) 。 看一個例子
這裡主要看一下。首先每次 next() 都把 generator 推向下一個 yield。 send() 函式如果含引數的話,就會替換 yield 表示式。從而輸出。
使用 generator
在之前的雲圖指令碼中,我們使用 jieba.cut() 方法返回的物件就是一個 gene。只需要用迴圈去訪問即可。
其實我們在 genertaror 中,基本從來都不會用到 next() 函式去寫,上面寫的東西只是給你理解 generator 這個東西。
下面看一個實際應用的例子