天天看點

說說Python中yield的用法?

說說Python中yield的用法?

新增加了一個欄目,就是每天給大家解答一道Python常見的面試題,反正每天不貪多,一天一題,正好合适,隻希望這個面試欄目,給那些正在準備面試的同學,提供一點點幫助!

小猿會從最基礎的面試題開始,每天一題。如果參考答案不夠好,或者有錯誤的話,麻煩大家可以在留言區給出自己的意見和讨論,大家是要一起學習的 。

廢話不多說,開始今天的題目:

問:說說Python中yield的用法?

答:Python中有一個非常有用的文法叫做生成器,用到的關鍵字就是yield。yield的作用是把一個函數變成生成器(generator),起到一個延遲的作用,在需要的時候産生結果,這樣可以有效地節約系統資源,避免不必要的記憶體占用。

可以先把yield看做return,就是在程式中傳回某個值,傳回之後程式就不再往下運作。看下面代碼,程式開始執行以後,因為getNum函數中有yield關鍵字,是以getNum函數并不會真的執行,而是先得到一個生成器。直到調用next方法,getNum函數正式開始執行,先執行getNum函數中的print方法,然後進入while循環 。

可以看出yield和return的差別:帶yield的函數是一個生成器,而不是一個函數了,這個生成器有一個函數就是next函數,next就相當于“下一步”生成哪個數,這一次的next開始的地方是接着上一次的next停止的地方執行的,是以調用next的時候,生成器并不會把函數重新執行,隻是接着上一步停止的地方開始 。

再來看一個生成器send函數的例子。看下面代碼,為什麼執行結果有個None值?這裡給大家留個小問題,大家可以自己思考下,然後在評論區留言談論,這個也是小知識點哦 。

如果對于參考答案有不認同的,大家可以在評論區指出和補充,歡迎留言!

關注小猿公衆号,每天學習一道題

說說Python中yield的用法?