欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

python里的生成器--yield-創(chuàng)新互聯(lián)

Python的生成器是個很強大的東西,特別是在python3.0版本以后。以最簡單的方式讓大家快速理解生成器。

高碑店網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)等網(wǎng)站項目制作,到程序開發(fā),運營維護。成都創(chuàng)新互聯(lián)自2013年創(chuàng)立以來到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)。

1、正常的寫法
來看個例子,比如輸出一個自定義長度的列表一般這么寫:
python里的生成器--yield
這里傳入的參數(shù)時10,所以會得到一個包含10個元素的列表:
python里的生成器--yield
那當我傳入的是10W的時候,那生成的這個列表就很大了,也占內(nèi)存,運行腳本也占cpu。

2、改良后寫法
改良一下代碼,把他寫成一個迭代的類:
python里的生成器--yield
這里面self.b就記錄了每次執(zhí)行next方法的位置,知道每次是第幾次執(zhí)行next方法,所以執(zhí)行保證了每次輸出的是期望的值,其實這就是迭代了,每運行一次函數(shù)都被記錄已運行的狀態(tài)。當被調(diào)用的時候才返回值,否則就處于等待被調(diào)用的狀態(tài)
運行結(jié)果:
python里的生成器--yield
所以這改良后的代碼就解決了當你輸入10W的時候占用資源的問題,因為輸入10W后,只要當調(diào)用next函數(shù)的時候才返回值,不是一次返回一個那么大的列表出來。
3、生成器
那么第二步中的代碼跟第一步比起來又太多了感覺,那么生成器就來了

再改良代碼:
python里的生成器--yield
只需改下第一步中的代碼a.append(n)為yield n,這就是一個生成器了,然后通過for語句來調(diào)用生成器的值。

任何一個帶有yield語句的函數(shù)都是生成器,當你直接調(diào)用這個函數(shù)時,內(nèi)部的代碼是不會被執(zhí)行的,只有調(diào)用yield里面的next函數(shù)才會去執(zhí)行代碼,for循環(huán)也就是會自動去調(diào)用這個next函數(shù)來輸出值。

可以理解為一個函數(shù)被yield中斷了,下載再次調(diào)用時繼續(xù)從上一次中斷的位置繼續(xù)執(zhí)行代碼并返回值。

講的比較簡單,不知道大家理解了沒有。

本文標題:python里的生成器--yield-創(chuàng)新互聯(lián)
分享地址:http://chinadenli.net/article26/deeecg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、ChatGPT企業(yè)建站、外貿(mào)建站搜索引擎優(yōu)化、網(wǎng)站排名

廣告

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

網(wǎng)站建設(shè)網(wǎng)站維護公司