Python yield使用方法示例
1. iterator
疊代器最簡(jiǎn)單例子應(yīng)該是數(shù)組下標(biāo)了,且看下面的c++代碼:
int array[10];
for ( int i = 0; i < 10; i++ )
printf("%d ", array[i]);
疊代器工作在一個(gè)容器里(array[10]),它按一定順序(i++)從容器里取出值(array[i])并進(jìn)行操作(printf("%d ", array[i])。
上面的代碼翻譯成python:
array = [i for i in range(10)]
for i in array:
print i,
首先,array作為一個(gè)list是個(gè)容器,其次list這個(gè)內(nèi)建類(lèi)型有默認(rèn)的next行為,python發(fā)現(xiàn)這些之后采取的秘密的沒(méi)被各位看到的動(dòng)作是:拿出array這丫容器的疊代器,從里面next一下把值給i供for循環(huán)主體處置,for把這個(gè)值print了。
現(xiàn)在的問(wèn)題是數(shù)據(jù)可以做容器疊代,代碼可以嗎?
2. constructor
怎么把函數(shù)變成constructor? 在函數(shù)體里有yield就行了!
def gen():
print 'enter'
yield 1
print 'next'
yield 2
print 'next again'
for i in gen():
print i
各位!python看到gen函數(shù)里出現(xiàn)yield,知道可以用next了,問(wèn)題是怎么對(duì)代碼這個(gè)容器玩next?
從容器里拿到iterator的時(shí)候它還什么也不是,處在容器入口處,對(duì)于數(shù)組來(lái)說(shuō)就是下標(biāo)為-1的地方,對(duì)于函數(shù)來(lái)說(shuō)就是函數(shù)入口嘛事沒(méi)干,但是萬(wàn)事俱備就欠next。
開(kāi)始for i in g,next讓itreator爬行到y(tǒng)ield語(yǔ)句存在的地方并返回值,
再次next就再爬到下一個(gè)yield語(yǔ)句存在的地方并返回值,依次這樣直到函數(shù)返回(容器盡頭)。
您一定看出來(lái)上面代碼的輸出是:
enter
1
next
2
next again
3. 使用yield
yield的代碼疊代能力不但能打斷函數(shù)執(zhí)行還能記下斷點(diǎn)處的數(shù)據(jù),下次next書(shū)接上回,
這正是遞歸函數(shù)需要的。
例如中序遍歷二叉樹(shù):
(應(yīng)該是David Mertz寫(xiě)的)
def inorder(t):
if t:
for x in inorder(t.left):
yield x
yield t.label
for x in inorder(t.right):
yield x
for n in inorder(tree)
print n
相關(guān)文章
Django框架組成結(jié)構(gòu)、基本概念與文件功能分析
這篇文章主要介紹了Django框架組成結(jié)構(gòu)、基本概念與文件功能,簡(jiǎn)單分析了Django框架的基本架構(gòu)、組成、項(xiàng)目創(chuàng)建方法、模塊組成以及相關(guān)文件功能,需要的朋友可以參考下2019-07-07
pandas如何優(yōu)雅的列轉(zhuǎn)行及行轉(zhuǎn)列詳解
我們?cè)谧鰯?shù)據(jù)處理的時(shí)候遇到pandas列轉(zhuǎn)行的問(wèn)題,這篇文章主要給大家介紹了關(guān)于pandas如何優(yōu)雅的列轉(zhuǎn)行及行轉(zhuǎn)列的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2021-12-12
使用py2exe在Windows下將Python程序轉(zhuǎn)為exe文件
這篇文章主要介紹了Windows下用py2exe將Python程序轉(zhuǎn)為exe文件的方法,注意py2exe只是負(fù)責(zé)文件格式的轉(zhuǎn)換,并不能將Python程序編譯為機(jī)器碼,要的朋友可以參考下2016-03-03
pyecharts如何實(shí)現(xiàn)顯示數(shù)據(jù)為百分比的柱狀圖
這篇文章主要介紹了pyecharts如何實(shí)現(xiàn)顯示數(shù)據(jù)為百分比的柱狀圖,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11
Python使用get_text()方法從大段html中提取文本的實(shí)例
今天小編就為大家分享一篇Python使用get_text()方法從大段html中提取文本的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08
python肯德?tīng)栂禂?shù)相關(guān)性數(shù)據(jù)分析示例
這篇文章主要為大家介紹了python肯德?tīng)栂禂?shù)相關(guān)性數(shù)據(jù)分析示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02
Python實(shí)現(xiàn)基于SVM的分類(lèi)器的方法
這篇文章主要介紹了Python實(shí)現(xiàn)基于SVM的分類(lèi)器的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
python高級(jí)內(nèi)置函數(shù)用法實(shí)例
在本篇文章里小編給大家整理的是一篇關(guān)于python高級(jí)內(nèi)置函數(shù)用法實(shí)例內(nèi)容,有興趣的朋友們可以學(xué)參考下。2021-09-09

