1 什么是yield函數(shù)? Python中yield函數(shù)是一個生成器(generator),可用于迭代,;在函數(shù)中yield類似于return,,不同的是,yield返回一個return的值并且記住這個返回值的位置,,下次迭代就從記住的這個位置開始,,并且下一次迭代時,從上一次迭代遇到的yield后面的代碼開始執(zhí)行,。 2 yield函數(shù)的特點及用法,。 yield函數(shù)的優(yōu)點在于它可迭代,但又不直接生成返回值,,如果采用return來返回值,,就會直接生成返回值;如果返回的值,,或者迭代的數(shù)據(jù)太大,,都會使得內(nèi)存消耗過大;yield函數(shù)就會很好的減少內(nèi)存的消耗,,但是它只可讀取一次,。帶有yield的函數(shù)不僅僅可以用于for循環(huán),還可以用于函數(shù)的參數(shù),,例如:
思考一下如果將用于函數(shù)參數(shù)的yield再增加一個輸出next()會發(fā)生什么情況呢,?
由以上代碼以及運行結(jié)果不難發(fā)現(xiàn),每一個next返回值,,都會在執(zhí)行到yield函數(shù)后暫停生成,,下一次next返回值則會繼續(xù)從上一個暫停的位置執(zhí)行,這也是yield函數(shù)的特點與用法,。 3 send()與next()用法的異同,。 next()函數(shù)可以不斷打印yield生成器的值; send()函數(shù)特別之處在于它可以攜帶參數(shù),,并修改上一個表達式的值,,同時用法也與next()有很多相同之處,; 3.1相同點 相同點在于,當send()所攜帶的參數(shù)為None(即未攜帶任何參數(shù))時,,用法與next()一模一樣,,都僅僅是來打印yield生成器的值。 3.2 不同點 不同點在于當send()所攜帶的參數(shù)時,,就會將所帶參數(shù)賦值給上一個表達式,;實例:
分析:首先執(zhí)行next(r),當?shù)谝淮斡鲆?/span>yield跳出輸出send():,;然后執(zhí)行r.send(234),,send()直接將234參數(shù)傳給i中并從yield位置繼續(xù)執(zhí)行,輸出i,,值為234,,然后輸出if條件語句,當執(zhí)行到下一個yield時,,也就是k=yield 345時,,跳出。 注意:yield的第一次執(zhí)行一定為next(r)或者r.send(None),。 4 總結(jié) 該文從介紹yield函數(shù)入手,,主要為大家講述了yield函數(shù)的用法及其特點,利用實例區(qū)分了next()和send()在打印生成器方法的異同,,有助于大家更快的掌握yield函數(shù)的用法,。 主 編 | 王文星 責 編 | 王卓越 where2go 團隊 |
|