日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python——生成器详解

發布時間:2025/3/21 python 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python——生成器详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、生成器的由來


列表和列表生成器都無法解決內存受限的問題,列表中的所有數據都保存在內存中,以至于列表中的元素的太多了,當列表中的元素超過超過幾十萬甚至幾百萬,大量數據占用電腦內存,從而導致內存溢出,不利于我們后面的編程,所以要引用生成器

二、生成器定義

生成器是python中的一個對象(按照某種規律,來生成元素的對象),生成器不是列表,保存了產生元素的算法,同時會記錄游標的位置(現在拿到第幾個元素了),為了下次繼續拿數據,而不是從頭開始拿數據。可以通過一直調用next()方法獲取值,這個對象不保存數據,每次調用會返回一個值,即做到了列表的好處,又不占用空間。

三、創建生成器

第一種方法:通過列表生成式來創建

generator:表示生成器
第二種方法:通過函數創建生成器(yield)
1、例如創建有限的斐波拉且數列

yield一般用于創建生成器,作用:返回后面變量(b)給生成器,而不是返回給函數的,b就是斐波拉且數列中的一個元素

只要在函數中有yield關鍵字,那么當前這個函數是屬于生成器中保存的算法,算法實現的功能就是生成b

不會打印done
2、例如創建無限的斐波拉且數列,不能用for循環

注意:yield:是沒有返回值的,如果賦值的話會打印None

輸出結果為:

四、遍歷生成器中的元素

第一種方法:
通過next(g),每調用一次next(),就會拿掉一個值(表達式中的第一個值),當已經遍歷到生成器的結尾,會拋一個異常StopIteration。第4次調用next()的時候,生成器中已經沒有數據了,繼續調用會報錯

第二種方法:
通過for循環遍歷,for循環不會拋出異常

for循環的打印結果為:4,5,6,7,因為調用了一次next(g),游標已經往下走了,
第三種方法
object內置的__next__,當已經遍歷到生成器的結尾,會拋一個異常StopIteration

第四種方法
send函數:但是生成器的第一個值必須使用send(None),后面的值就沒有限制了

總結

以上是生活随笔為你收集整理的python——生成器详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。