400-650-7353
您所在的位置:首頁 > IT干貨資料 > python > 【Python基礎知識】Python生成器函數

【Python基礎知識】Python生成器函數

  • 發布: python培訓
  • 來源:python干貨資料
  • 2020-11-06 15:33:33
  • 閱讀()
  • 分享
  • 手機端入口

對于程序而言,內存也是很重要的,因為程序中很多數據都是保存在內存中的,如果內存中存儲的數據過多,那么系統就會崩潰,這是人們不希望發生的。

可以采用生成器推導式來解決內存不足的問題。例如,利用生成器推導式創建一個生成器n,數據為1~33數字,可以寫成n = (i for i in range(1, 34))。這樣當程序需要一個數時,程序才生成數據,可以節省內存。然而生成器推導式太過簡單,只能用一行代碼的形式實現,如果要創建復雜的生成器,如創建一個生成器f,生成前10個斐波那契數字,生成器推導式已經不能滿足需求了,因為斐波那契數列最開始的兩個數都無法賦值。

函數可以實現復雜的功能,然而要節省內存,就需要使用生成器函數。生成器函數與普通函數的區別是函數中包含關鍵字yield。實際上只要含有yield關鍵字的函數就是生成器函數。

生成器函數是用函數實現生成器。定義生成器函數的語法格式如下:

  1. >>> def fib():   # 定義生成器函數 
  2. ...     a, b = 11   # 定義初始值 
  3. ...     while True
  4. ...         yield a   # 暫停執行,返回一個新變量值 
  5. ...         a, b = b, a+b 
  6. ... 
  7. >>> a= fib()   # 調用生成器函數 
  8. >>> for i in range(10): 
  9. ...     print(next(a))   # 調用生成器函數的yield生成值 
  10. ... 
  11. 1 
  12. 1 
  13. 2 
  14. 3 
  15. 5 
  16. 8 
  17. 13 
  18. 21 
  19. 34 
  20. 55 

def 函數名(參數):

函數體

yield 變量名

函數體

由語法格式可知,生成器函數與普通函數的區別在于函數體部分,生成器函數的函數體含有“yield 變量名”語句。yield的功能類似于return,return是函數返回值,yield的功能也是返回變量,但是它僅返回變量而不退出函數,因此,yield可以看作是多次返回變量且不會退出函數的return。

在調用生成器函數時,寫上函數名與參數,并通過一個變量接收返回值,語法格式如下:

變量名 = 函數名(參數)

調用生成器函數的yield生成值的第一種方法如下:

next(變量名)

第二種方法如下:

變量名.__next__()

在掌握了生成器函數的定義和調用之后,就可以使用生成器函數實現生成前10個斐波那契數字的案例了。這個案例主要分為三步,第一步是定義生成器函數,第二步是調用并賦值,第三步是打印結果,代碼如下:

在上述程序中,首先定義生成器函數fib(),函數內先定義斐波那契數列的兩個初始值,再寫一個while True死循環。這個死循環有些特別,先是用yield生成待使用的數字,再通過賦值語句“a, b = b, a+b”將b的值賦給a,將a+b的值賦給b,每次循環都是如此。然后調用生成器函數fib(),再調用生成器函數的yield生成值,最后打印結果。由于需要生成前10個斐波那契數字,因此可以采用for循環,每循環一次生成并打印一個斐波那契數字,共循環10次。第一次循環時,調用yield生成值a,即1;第二次循環時,調用yield生成值a,a被賦值成b的值,即1,而b被賦值成a+b的值,即2;第三次循環時,調用yield生成值a,a被賦值成b的值,而此時b的值是上次賦值的a+b的值,即2……以此類推,就得到了整個斐波那契數列。

如果對Python開發感興趣或者想要深入學習的現在可以免費領取學習大禮包哦(點擊領取80G課程資料 備注:領資料)。

文章“【Python基礎知識】Python生成器函數”已幫助

>>本文地址:http://www.028benet.com/zhuanye/2020/59911.html

THE END  

聲明:本站稿件版權均屬中公教育優就業所有,未經許可不得擅自轉載。

1 您的年齡

2 您的學歷

3 您更想做哪個方向的工作?

獲取測試結果
  • 大前端大前端
  • 大數據大數據
  • 互聯網營銷互聯網營銷
  • JavaJava
  • Linux云計算Linux
  • Python+人工智能Python
  • 嵌入式物聯網嵌入式
  • 全域電商運營全域電商運營
  • 軟件測試軟件測試
  • 室內設計室內設計
  • 平面設計平面設計
  • 電商設計電商設計
  • 網頁設計網頁設計
  • 全鏈路UI/UE設計UI設計
  • VR/AR游戲開發VR/AR
  • 網絡安全網絡安全
  • 新媒體與短視頻運營新媒體
  • 直播帶貨直播帶貨
  • 智能機器人軟件開發智能機器人
 

快速通道fast track

近期開班時間TIME

主站蜘蛛池模板: 日本一区视频在线| 国产精品成人va在线观看入口| 大学生美女特级毛片| 国产白白白在线永久播放| 人夫的堕落变装| 亚洲欧洲久久精品| 亚洲av无码久久忘忧草| 久久久久亚洲AV成人无码| 91国语精品自产拍在线观看一| 蜜桃成熟时2005| 欧美精品专区第1页| 日产精品99久久久久久| 国产精品亚洲四区在线观看| 亚洲国产精品一区二区三区在线观看| 一级毛片不收费| 一个人看的www在线观看免费 | аⅴ资源中文在线天堂| 青青草国产精品欧美成人| 精品国产无限资源免费观看| 欧美日韩一区二区三区四区 | 欧美v日韩v亚洲v最新| 在线观看免费成人| 国产噜噜在线视频观看| 亚洲码欧美码一区二区三区| 2019天天干夜夜操| 永久免费毛片在线播放| 处破痛哭A√18成年片免费| 午夜福利一区二区三区在线观看| 亚洲s色大片在线观看| 3d成人免费动漫在线观看| 激情啪啪精品一区二区| 成年人免费黄色| 国产精品高清一区二区三区| 亚洲狠狠狠一区二区三区| а√最新版地址在线天堂| 永久免费a∨片在线观看| 引诱亲女乱小说| 国产成人免费片在线视频观看| 亚洲视频在线观看网站| 91福利一区二区| 色吧亚洲欧美另类|