python中Genarator函數(shù)用法分析
本文實(shí)例講述了python中Genarator函數(shù)用法。分享給大家供大家參考。具體如下:
Generator函數(shù)的定義與普通函數(shù)的定義沒(méi)有什么區(qū)別,只是在函數(shù)體內(nèi)使用yield生成數(shù)據(jù)項(xiàng)即可。Generator函數(shù)可以被for循環(huán)遍歷,而且可以通過(guò)next()方法獲得yield生成的數(shù)據(jù)項(xiàng)。
def func(n): for i in range(n): yield i for i in func(3): print i r=func(3) print r.next() print r.next() print r.next() print r.next()
運(yùn)行結(jié)果如下:
0 1 2 0 1 2 Traceback (most recent call last): File "generator.py", line 10, in <module> print r.next() StopIteration
yield保留字與return 語(yǔ)句的返回值和執(zhí)行原理都不相同。yield生成值并不會(huì)中止程序的執(zhí)行,返回值后程序繼續(xù)往后執(zhí)行。return 返回值后,程序?qū)⒅兄箞?zhí)行。
Generator函數(shù)一次只返回一個(gè)數(shù)據(jù)項(xiàng),占用更少的內(nèi)存。每次生成數(shù)據(jù)都要記錄當(dāng)前的狀態(tài),便于下一次生成數(shù)據(jù)。
當(dāng)程序需要較高的性能或一次只需要一個(gè)值進(jìn)行處理時(shí),使用generator函數(shù)。當(dāng)需要獲取一次性一組元素的值時(shí),使用序列。
函數(shù)里只要有了yield,這個(gè)函數(shù)就會(huì)被編譯成一個(gè)generator 函數(shù)。generator函數(shù)object支持python iterator protocol。 每次調(diào)用這個(gè)對(duì)象的next,generator函數(shù)就執(zhí)行到y(tǒng)ield,獲取到y(tǒng)ield生成的值。如果函數(shù)返回,就拋出一個(gè)異常。這里有個(gè)概念就是generator 函數(shù)使用yield生成一個(gè)值,而不是返回一個(gè)值。生成之后函數(shù)還沒(méi)結(jié)束,返回了函數(shù)就結(jié)束了。
>>> x = gensquares(5) >>> print x <generator object at 0x00B72D78> >>> print x.next() 0 >>> print x.next() 1 >>> print x.next() 4 >>> print x.next() 9 >>> print x.next() 16 >>> print x.next() Traceback (most recent call last): File "<stdin>", line 1, in ? StopIteration >>>
希望本文所述對(duì)大家的Python程序設(shè)計(jì)有所幫助。
相關(guān)文章
零基礎(chǔ)寫(xiě)python爬蟲(chóng)之使用Scrapy框架編寫(xiě)爬蟲(chóng)
前面的文章我們介紹了Python爬蟲(chóng)框架Scrapy的安裝與配置等基本資料,本文我們就來(lái)看看如何使用Scrapy框架方便快捷的抓取一個(gè)網(wǎng)站的內(nèi)容,隨便選個(gè)小站(dmoz.org)來(lái)示例吧2014-11-11Python的Django中將文件上傳至七牛云存儲(chǔ)的代碼分享
七牛云存儲(chǔ)可以幫助服務(wù)器轉(zhuǎn)存圖片等數(shù)據(jù),類(lèi)似于Dropbox等存儲(chǔ)服務(wù),這里就帶給大家Python的Django中將文件上傳至七牛云存儲(chǔ)的代碼分享,需要的朋友可以參考下2016-06-06用Python編寫(xiě)一個(gè)簡(jiǎn)單的Lisp解釋器的教程
這篇文章主要介紹了用Python編寫(xiě)一個(gè)簡(jiǎn)單的Lisp解釋器的教程,Lisp是一種源碼簡(jiǎn)單的函數(shù)式編程語(yǔ)言,本文主要介紹對(duì)其中的一個(gè)子集Scheme的解釋器開(kāi)發(fā),需要的朋友可以參考下2015-04-04Python強(qiáng)化練習(xí)之Tensorflow2 opp算法實(shí)現(xiàn)月球登陸器
在面向?qū)ο蟪霈F(xiàn)之前,我們采用的開(kāi)發(fā)方法都是面向過(guò)程的編程(OPP)。面向過(guò)程的編程中最常用的一個(gè)分析方法是“功能分解”。我們會(huì)把用戶(hù)需求先分解成模塊,然后把模塊分解成大的功能,再把大的功能分解成小的功能,整個(gè)需求就是按照這樣的方式,最終分解成一個(gè)一個(gè)的函數(shù)2021-10-10在Python中用GDAL實(shí)現(xiàn)矢量對(duì)柵格的切割實(shí)例
這篇文章主要介紹了在Python中用GDAL實(shí)現(xiàn)矢量對(duì)柵格的切割實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03Python編程快速上手——Excel到CSV的轉(zhuǎn)換程序案例分析
這篇文章主要介紹了Python Excel到CSV的轉(zhuǎn)換程序,結(jié)合具體案例形式分析了Python操作Excel到CSV轉(zhuǎn)換的操作技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下2020-02-02Django中ajax發(fā)送post請(qǐng)求 報(bào)403錯(cuò)誤CSRF驗(yàn)證失敗解決方案
這篇文章主要介紹了Django中ajax發(fā)送post請(qǐng)求 報(bào)403錯(cuò)誤CSRF驗(yàn)證失敗解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08pytorch Variable與Tensor合并后 requires_grad()默認(rèn)與修改方式
這篇文章主要介紹了pytorch Variable與Tensor合并后 requires_grad()默認(rèn)與修改方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-05-05