久久久精品一区ed2k-女人被男人叉到高潮的视频-中文字幕乱码一区久久麻豆樱花-俄罗斯熟妇真实视频

pythonyield函數(shù),python中yield語(yǔ)句的作用

python yield怎么實(shí)現(xiàn)的

yield是生成器關(guān)鍵詞,是在函數(shù)內(nèi)使用的生成器語(yǔ)法(你也可以理解為是用在函數(shù)內(nèi)的創(chuàng)建生成器的方法),讓函數(shù)返回的是一個(gè)生成器而不再返回函數(shù)計(jì)算得到的結(jié)果。比如:

創(chuàng)新互聯(lián)公司長(zhǎng)期為1000多家客戶(hù)提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為樅陽(yáng)企業(yè)提供專(zhuān)業(yè)的成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè),樅陽(yáng)網(wǎng)站改版等技術(shù)服務(wù)。擁有10年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。

也可以使用python2里的生成器的內(nèi)部方法next()迭代出來(lái):

迭代完再調(diào)用next迭代則會(huì)報(bào)錯(cuò)

如果是python3則是使用內(nèi)置函數(shù)next()

同樣的迭代完再迭代則會(huì)報(bào)錯(cuò)

python中yield和return究竟有什么區(qū)別,怎么用

yield

yield是用于生成器。什么是生成器,你可以通俗的認(rèn)為,在一個(gè)函數(shù)中,使用了yield來(lái)代替return的位置的函數(shù),就是生成器。它不同于函數(shù)的使用方法是:函數(shù)使用return來(lái)進(jìn)行返回值,每調(diào)用一次,返回一個(gè)新加工好的數(shù)據(jù)返回給你;yield不同,它會(huì)在調(diào)用生成器的時(shí)候,把數(shù)據(jù)生成object,然后當(dāng)你需要用的時(shí)候,要用next()方法來(lái)取,同時(shí)不可逆。你可以通俗的叫它"輪轉(zhuǎn)容器",可用現(xiàn)實(shí)的一種實(shí)物來(lái)理解:水車(chē),先yield來(lái)裝入數(shù)據(jù)、產(chǎn)出generator object、使用next()來(lái)釋放;好比水車(chē)轉(zhuǎn)動(dòng)后,車(chē)輪上的水槽裝入水,隨著輪子轉(zhuǎn)動(dòng),被轉(zhuǎn)到下面的水槽就能將水送入水道中流入田里。

def func3():

for i in range(1,5):

yield i#裝入

gob = func3()#generator 類(lèi)型

print next(gob)#1 釋放的第一個(gè)裝入的數(shù)據(jù),(先入先出)

print next(gob)#2

print next(gob)#3

print next(gob)#4

print next(gob)#報(bào)錯(cuò)

復(fù)制代碼

return

這個(gè)大家都知道了,一句話(huà),return既可以終止函數(shù)的執(zhí)行,也可以返回函數(shù)加工處理好的數(shù)據(jù),只是這個(gè)數(shù)據(jù)需要一個(gè)載體來(lái)進(jìn)行保存,通常是變量。非條件判斷的時(shí)候,只要遇見(jiàn)return,函數(shù)就結(jié)束執(zhí)行。

Python中的yield和send

yield的用法是:記住上一次返回時(shí)在函數(shù)體中的位置,調(diào)用此函數(shù)從上一次返回的位置開(kāi)始執(zhí)行。?

send的用法時(shí):send()方法返有一個(gè)參數(shù),該參數(shù)指定的是上一次被掛起的yield語(yǔ)句的返回值。?

區(qū)別:當(dāng)send()的參數(shù)為None時(shí),正好與next方法等價(jià)。在調(diào)用send()方法時(shí),要么先調(diào)用一次next()

到函數(shù)掛起的位置,或者直接send(None)。

輸出結(jié)果為:

python中yield是什么意思

一個(gè)帶有 yield 的函數(shù)就是一個(gè) generator,它和普通函數(shù)不同,生成一個(gè) generator 看起來(lái)像函數(shù)調(diào)用,但不會(huì)執(zhí)行任何函數(shù)代碼,直到對(duì)其調(diào)用 next()(在 for 循環(huán)中會(huì)自動(dòng)調(diào)用 next())才開(kāi)始執(zhí)行。雖然執(zhí)行流程仍按函數(shù)的流程執(zhí)行,但每執(zhí)行到一個(gè) yield 語(yǔ)句就會(huì)中斷,并返回一個(gè)迭代值,下次執(zhí)行時(shí)從 yield 的下一個(gè)語(yǔ)句繼續(xù)執(zhí)行。看起來(lái)就好像一個(gè)函數(shù)在正常執(zhí)行的過(guò)程中被 yield 中斷了數(shù)次,每次中斷都會(huì)通過(guò) yield 返回當(dāng)前的迭代值。

具體,請(qǐng)參考下以下資料:

閑話(huà)python 45: 淺談生成器yield

生成器似乎并不是一個(gè)經(jīng)常被開(kāi)發(fā)者討論的語(yǔ)法,因此也就沒(méi)有它的大兄弟迭代器那么著名。大家不討論它并不是說(shuō)大家都已經(jīng)對(duì)它熟悉到人盡皆知,與之相反,即使是工作多年的開(kāi)發(fā)者可能對(duì)生成器的運(yùn)行過(guò)程還是知之甚少。這是什么原因?qū)е碌哪兀课也孪氪蟾庞幸韵聨c(diǎn)原因: (1)運(yùn)行流程不同尋常,(2)日常開(kāi)發(fā)不需要,(3)常常將生成器與迭代器混淆。 生成器的運(yùn)行流程可以按照協(xié)程來(lái)理解,也就是說(shuō) 返回中間結(jié)果,斷點(diǎn)繼續(xù)運(yùn)行 。這與我們通常對(duì)于程序調(diào)用的理解稍有差異。這種運(yùn)行模式是針對(duì)什么樣的需求呢? 一般而言,生成器是應(yīng)用于大量磁盤(pán)資源的處理。 比如一個(gè)很大的文件,每次讀取一行,下一次讀取需要以上一次讀取的位置為基礎(chǔ)。下面就通過(guò)代碼演示具體看看生成器的運(yùn)行機(jī)制、使用方式以及與迭代器的比較。

什么是生成器?直接用文字描述可能太過(guò)抽象,倒不如先運(yùn)行一段代碼,分析這段代碼的運(yùn)行流程,然后總結(jié)出自己對(duì)生成器的理解。

從以上演示可以看出,這段代碼定義了一個(gè)函數(shù),這個(gè)函數(shù)除了yield這個(gè)關(guān)鍵字之外與一般函數(shù)并沒(méi)有差異,也就是說(shuō)生成器的魔法都是這個(gè)yield關(guān)鍵字引起的。 第一點(diǎn),函數(shù)的返回值是一個(gè)生成器對(duì)象。 上述代碼中,直接調(diào)用這個(gè)看似普通的函數(shù),然后將返回值打印出來(lái),發(fā)現(xiàn)返回值是一個(gè)對(duì)象,而并不是普通函數(shù)的返回值。 第二點(diǎn),可以使用next對(duì)這個(gè)生成器對(duì)象進(jìn)行操作 。生成器對(duì)象天然的可以被next函數(shù)調(diào)用,然后返回在yield關(guān)鍵字后面的內(nèi)容。 第三,再次調(diào)用next函數(shù)處理生成器對(duì)象,發(fā)現(xiàn)是從上次yield語(yǔ)句之后繼續(xù)運(yùn)行,直到下一個(gè)yield語(yǔ)句返回。

生成器的運(yùn)行流程確實(shí)詭異,下面還要演示一個(gè)生成器可以執(zhí)行的更加詭異的操作:運(yùn)行過(guò)程中向函數(shù)傳參。

返回生成器和next函數(shù)操作生成器已經(jīng)并不奇怪了,但是在函數(shù)運(yùn)行過(guò)程中向其傳參還是讓人驚呆了。 調(diào)用生成器的send函數(shù)傳入?yún)?shù),在函數(shù)內(nèi)使用yield語(yǔ)句的返回值接收,然后繼續(xù)運(yùn)行直到下一個(gè)yield語(yǔ)句返回。 以前實(shí)現(xiàn)這種運(yùn)行流程的方式是在函數(shù)中加上一個(gè)從控制臺(tái)獲取數(shù)據(jù)的指令,或者提前將參數(shù)傳入,但是現(xiàn)在不用了,send方式使得傳入的參數(shù)可以隨著讀取到的參數(shù)變化而變化。

很多的開(kāi)發(fā)者比較容易混淆生成器和迭代器,而迭代器的運(yùn)行過(guò)程更加符合一般的程序調(diào)用運(yùn)行流程,因此從親進(jìn)度和使用熟悉度而言,大家對(duì)迭代器更有好感。比如下面演示一個(gè)對(duì)迭代器使用next方法進(jìn)行操作。

從以上演示來(lái)看,大家或許會(huì)認(rèn)為迭代器比生成器簡(jiǎn)單易用得太多了。不過(guò),如果你了解迭代器的實(shí)現(xiàn)機(jī)制,可能就不會(huì)這么早下結(jié)論了。python內(nèi)置了一些已經(jīng)實(shí)現(xiàn)了的迭代器使用確實(shí)方便,但是如果需要自己去寫(xiě)一個(gè)迭代器呢?下面這段代碼就帶大家見(jiàn)識(shí)以下迭代器的實(shí)現(xiàn)。

在python中,能被next函數(shù)操作的對(duì)象一定帶有__next__函數(shù)的實(shí)現(xiàn),而能夠被迭代的對(duì)象有必須實(shí)現(xiàn)__iter__函數(shù)??戳诉@么一段操作,相信大家對(duì)迭代器實(shí)現(xiàn)的繁瑣也是深有體會(huì)了,那么生成器的實(shí)現(xiàn)是不是會(huì)讓你覺(jué)得更加簡(jiǎn)單易用呢?不過(guò)千萬(wàn)別產(chǎn)生一個(gè)誤區(qū),即生成器比迭代器簡(jiǎn)單就多用生成器。 在實(shí)際開(kāi)發(fā)中,如果遇到與大量磁盤(pán)文件或者數(shù)據(jù)庫(kù)操作相關(guān)的倒是可以使用生成器。但是在其他的任務(wù)中使用生成器難免有炫技,并且使邏輯不清晰而導(dǎo)致可讀性下降的嫌疑。 這大概也能解釋生成器受冷落的原因。不過(guò)作為一個(gè)專(zhuān)業(yè)的開(kāi)發(fā)者,熟悉語(yǔ)言特性是分內(nèi)之事。

到此,關(guān)于生成器的討論就結(jié)束了。本文的notebook版本文件在github上的cnbluegeek/notebook倉(cāng)庫(kù)中共享,歡迎感興趣的朋友前往下載。

分享題目:pythonyield函數(shù),python中yield語(yǔ)句的作用
網(wǎng)站鏈接:http://sd-ha.com/article0/hcocoo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、虛擬主機(jī)、建站公司、網(wǎng)站排名、品牌網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)