Python中的yield用法

2021-07-10 16:01:36 字數 1571 閱讀 5533

在python中,我們將帶有 yield 的函式稱之為 generator(生成器)。generator可以一邊迴圈一邊計算,是可迭代物件,也就是說可以使用for迴圈來迭代出generator的各個值。

一般為了說明generator,都會使用斐波那契數列來舉例,這裡也不例外:

如結果所示,呼叫 fab(5) 並不會執行 fab 函式,而是返回乙個 可迭代物件, 每次迴圈都會執行 fab 函式內部的**,執行到 yield b 時,fab 函式就返回乙個迭代值,下次迭代時,**從 yield b 的下一條語句繼續執行,而函式的本地變數看起來和上次中斷執行前是完全一樣的,函式繼續執行,直到再次遇到 yield或return。

在乙個 generator中,如果沒有 return,則預設執行至函式完畢,如果在執行過程中遇見了return,則直接丟擲 stopiteration 終止迭代。

與generator有關的很重要的函式有next()和send(parameter)。

因為generator是可迭代物件,我們可以使用next()來手動迭代其各個值。仍然拿上面fab()函式來舉例,如下圖所示:

send(parameter)函式可以給yield表示式傳值,而next()只能傳遞none進去。因此,某種程度上c.next() 和 c.send(none)的作用是一樣的。來看例子:

可以看到,認為n=5、m=10是錯誤的!這是因為yield是乙個表示式,(yield 5)本身是有乙個返回值的,這個返回值可以由send(parameter)函式傳遞進去:

需要注意的是,第一次呼叫時不能使用send傳送乙個非none值,否則會報錯,因為沒有yield語句來接收這個值。可以使用next()語句或send(none)。

send(parameter) 和 next()這兩個函式是有其自己的返回值的,它們的返回值很特殊,返回的是下乙個yield表示式的引數。比如yield 5,則返回5。

因為for迴圈迭代generator時,其實是一次次呼叫了next()函式,直到丟擲stopiteration異常為止。而每次迭代出的值,其實就是next()函式的返回值,也就是yield表示式的引數!

Python中的yield用法

yield關鍵字用來定義生成器 generator 其具體功能是可以當return使用,從函式裡返回乙個值,不同之處是用yield返回之後,可以讓函式從上回yield返回的地點繼續執行。也就是說,yield返回函式,交給呼叫者乙個返回值,然後再 瞬移 回去,讓函式繼續執行,直到嚇一條yield語句再...

python中 yield的用法

接下來是正題 首先,如果你還沒有對yield有個初步分認識,那麼你先把yield看做 return 這個是直觀的,它首先是個return,普通的return是什麼意思,就是在程式中返回某個值,返回之後程式就不再往下執行了。看做return之後再把它看做乙個是生成器 generator 的一部分 帶y...

Python中yield的用法

yield是生成的意思,但是在python中則是作為生成器理解,生成器的用處主要可以迭代,這樣簡化了很多運算模型 還不是很了解是如何簡化的 yield是乙個表示式,是有返回值的.當乙個函式中含有yield時,它不再是乙個普通的函式,而是乙個生成器.當該函式被呼叫時不會自動執行,而是暫停,見第乙個例子...