91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python里的生成器--yield

發布時間:2020-07-23 06:48:43 來源:網絡 閱讀:5003 作者:niedongri 欄目:軟件技術

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

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

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

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

任何一個帶有yield語句的函數都是生成器,當你直接調用這個函數時,內部的代碼是不會被執行的,只有調用yield里面的next函數才會去執行代碼,for循環也就是會自動去調用這個next函數來輸出值。

可以理解為一個函數被yield中斷了,下載再次調用時繼續從上一次中斷的位置繼續執行代碼并返回值。

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

栾城县| 平顶山市| 泽普县| 横峰县| 故城县| 邯郸县| 靖西县| 澜沧| 鹤庆县| 庆阳市| 肇庆市| 营口市| 兴城市| 宁都县| 新闻| 油尖旺区| 甘谷县| 竹北市| 包头市| 西乌珠穆沁旗| 绥宁县| 措美县| 千阳县| 永靖县| 九寨沟县| 若羌县| 蒙山县| 清远市| 阳春市| 淮滨县| 金寨县| 旅游| 田东县| 客服| 三门峡市| 秦皇岛市| 盐津县| 鄂托克前旗| 鄂尔多斯市| 桦南县| 会东县|