最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入淺析Python中的yield關(guān)鍵字

 更新時(shí)間:2018年01月24日 10:57:23   作者:震靈  
python中有一個(gè)非常有用的語(yǔ)法叫做生成器,所利用到的關(guān)鍵字就是yield。接下來(lái)腳本之家小編給大家?guī)?lái)了Python中的yield關(guān)鍵字詳細(xì)解析,感興趣的朋友參考下吧

前言

python中有一個(gè)非常有用的語(yǔ)法叫做生成器,所利用到的關(guān)鍵字就是yield。有效利用生成器這個(gè)工具可以有效地節(jié)約系統(tǒng)資源,避免不必要的內(nèi)存占用。

一段代碼

def fun():
for i in range(20):
 x=yield i
 print('good',x)
if __name__ == '__main__':
a=fun()
a.__next__()
x=a.send(5)
print(x)

這段代碼很短,但是詮釋了yield關(guān)鍵字的核心用法,即逐個(gè)生成。在這里獲取了兩個(gè)生成器產(chǎn)生的值,即0和1。分別由next函數(shù)和send()函數(shù)獲得,這兩個(gè)函數(shù)的區(qū)別我們后面會(huì)詳細(xì)闡述。

關(guān)于__next__函數(shù),這里先說(shuō)明一下,我們可以利用__next__()這個(gè)函數(shù)持續(xù)獲取符合fun函數(shù)規(guī)則的數(shù),直到19結(jié)束。這段代碼如下所示:

def fun():
for i in range(20):
 x=yield i
if __name__ == '__main__':
for x in fun():
 print(x)

這段代碼的效果和下面這段代碼是完全相同的

if __name__ == '__main__':
for i in range(20):
 x=yield i

for..in調(diào)用生成器算是生成器的基礎(chǔ)用法,不過(guò)只會(huì)用for..in意義是不大的。生成器中最重要的函數(shù)是sent和__next__這兩個(gè)函數(shù),下面就針對(duì)這兩個(gè)函數(shù)進(jìn)行詳細(xì)的闡述。

sent函數(shù)

這里特別強(qiáng)調(diào)了sent函數(shù),因?yàn)閟ent函數(shù)沒(méi)有那么直觀。__next__函數(shù)很好理解,就是從上一個(gè)終止點(diǎn)開(kāi)始,到下一個(gè)yield結(jié)束,返回值就是yield表達(dá)式的值。

例如在初始的那段代碼里:

def fun():
for i in range(20):
 x=yield i
 print('good',x)

第一次調(diào)用__next__函數(shù)的時(shí)候,我們從fun的起點(diǎn)開(kāi)始,然后在yield處結(jié)束,需要注意的是,賦值語(yǔ)句不會(huì)調(diào)用,此處yield i和含義和return差不多。

但是第二次調(diào)用__next__函數(shù)的時(shí)候,就會(huì)直接從上一個(gè)yield的結(jié)束處開(kāi)始,也就是先執(zhí)行賦值語(yǔ)句,然后輸出字符串,進(jìn)入下一個(gè)循環(huán),直到下一個(gè)yield或者生成器結(jié)束

再次看初始的那段代碼,可以發(fā)現(xiàn)第二次調(diào)用的時(shí)候沒(méi)有選擇使用__next__函數(shù),而是使用了一個(gè)sent()函數(shù)。這里就需要注意,sent()函數(shù)的用法和__next__函數(shù)不太一樣。sent()函數(shù)只能從yield之后開(kāi)始,到下一個(gè)yield結(jié)束。這也就意味著第一次調(diào)用必須使用__next__函數(shù)。

sent()函數(shù)最重要的作用在于它可以給yield對(duì)應(yīng)的賦值語(yǔ)句賦值,比如上面那一段代碼中的

x=yield i

如果調(diào)用__next()__函數(shù),那么x=None。但是如果調(diào)用sent(5),那么x=5。除了上述將的兩個(gè)特征以外,sent和next并沒(méi)有什么區(qū)別,sent函數(shù)也會(huì)返回yield表達(dá)式對(duì)應(yīng)的值

next函數(shù)調(diào)用次可能有限

需要特別注意的是,盡管是生成器。但是next函數(shù)的調(diào)用次數(shù)可能是有限的。比如下面這段代碼

def fun():
for i in range(20):
 x=yield i
 print('good',x)
if __name__ == '__main__':
a=fun()
for i in range(30):
 x=a.__next__()
 print(x)

生成器里的函數(shù)只循環(huán)了20次,但是next函數(shù)卻調(diào)用了30次,這時(shí)候就會(huì)觸發(fā)StopIteration異常。

總結(jié)

以上所述是小編給大家介紹的Python中的yield關(guān)鍵字,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • python3.6下Numpy庫(kù)下載與安裝圖文教程

    python3.6下Numpy庫(kù)下載與安裝圖文教程

    這篇文章主要為大家詳細(xì)介紹了python Numpy庫(kù)下載與安裝圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • Python中關(guān)于集合的介紹與常規(guī)操作解析

    Python中關(guān)于集合的介紹與常規(guī)操作解析

    Python除了List、Tuple、Dict等常用數(shù)據(jù)類(lèi)型外,還有一種數(shù)據(jù)類(lèi)型叫做集合(set),集合的最大特點(diǎn)是:集合里邊的元素是不可重復(fù)的并且集合內(nèi)的元素還是無(wú)序的
    2021-09-09
  • 使用Python讀寫(xiě)文本文件及編寫(xiě)簡(jiǎn)單的文本編輯器

    使用Python讀寫(xiě)文本文件及編寫(xiě)簡(jiǎn)單的文本編輯器

    這篇文章主要介紹了使用Python讀寫(xiě)文本文件及編寫(xiě)簡(jiǎn)單的文本編輯器的方法,可以利用簡(jiǎn)單的Python代碼實(shí)現(xiàn)編輯器中的讀取清空和文本文件的新建等操作,需要的朋友可以參考下
    2016-03-03
  • python opencv旋轉(zhuǎn)圖像(保持圖像不被裁減)

    python opencv旋轉(zhuǎn)圖像(保持圖像不被裁減)

    這篇文章主要為大家詳細(xì)介紹了python opencv旋轉(zhuǎn)圖像,保持圖像不被裁減,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • 決策樹(shù)的python實(shí)現(xiàn)方法

    決策樹(shù)的python實(shí)現(xiàn)方法

    這篇文章主要介紹了決策樹(shù)的python實(shí)現(xiàn)方法,詳細(xì)分析了決策樹(shù)的優(yōu)缺點(diǎn)及算法思想并以完整實(shí)例形式講述了Python實(shí)現(xiàn)決策樹(shù)的方法,具有一定的借鑒價(jià)值,需要的朋友可以參考下
    2014-11-11
  • Python表格數(shù)據(jù)處理庫(kù)之tablib庫(kù)詳解

    Python表格數(shù)據(jù)處理庫(kù)之tablib庫(kù)詳解

    這篇文章主要介紹了Python表格數(shù)據(jù)處理庫(kù)之tablib庫(kù)詳解,Tablib是一個(gè)用于處理電子表格數(shù)據(jù)的Python庫(kù),它可以輕松地進(jìn)行數(shù)據(jù)的導(dǎo)入和導(dǎo)出,以及數(shù)據(jù)格式的轉(zhuǎn)換,需要的朋友可以參考下
    2023-08-08
  • Python?異之如何同時(shí)運(yùn)行多個(gè)協(xié)程詳解

    Python?異之如何同時(shí)運(yùn)行多個(gè)協(xié)程詳解

    這篇文章主要為大家介紹了Python?異之如何同時(shí)運(yùn)行多個(gè)協(xié)程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • Windows下實(shí)現(xiàn)pytorch環(huán)境搭建

    Windows下實(shí)現(xiàn)pytorch環(huán)境搭建

    這篇文章主要介紹了Windows下實(shí)現(xiàn)pytorch環(huán)境搭建,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • python Event事件、進(jìn)程池與線程池、協(xié)程解析

    python Event事件、進(jìn)程池與線程池、協(xié)程解析

    這篇文章主要介紹了python Event事件、進(jìn)程池與線程池、協(xié)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • 解決Django的request.POST獲取不到內(nèi)容的問(wèn)題

    解決Django的request.POST獲取不到內(nèi)容的問(wèn)題

    今天小編就為大家分享一篇解決Django的request.POST獲取不到內(nèi)容的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05

最新評(píng)論

淮滨县| 屏山县| 佛坪县| 龙州县| 沙河市| 双柏县| 从江县| 萝北县| 渭南市| 荔波县| 巴林左旗| 婺源县| 西和县| 泗洪县| 石河子市| 惠安县| 达日县| 肃南| 徐闻县| 富川| 高密市| 海晏县| 麻栗坡县| SHOW| 维西| 皮山县| 民勤县| 阿瓦提县| 鄂温| 沈阳市| 绥阳县| 兴文县| 景泰县| 乌兰察布市| 永嘉县| 宣武区| 大竹县| 绥芬河市| 金秀| 曲阜市| 镇赉县|