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課程資料 備注:領資料)。

課程好禮申請領取
您的姓名
您的電話
意向課程
 

中公優就業

官方QQ

掃描上方二維碼或點擊一鍵加群,免費領取價值599元網課,加群暗號:599。 一鍵加群

>>本文地址:
注:本站稿件未經許可不得轉載,轉載請保留出處及源文件地址。

推薦閱讀

優就業:ujiuye

關注中公優就業官方微信

  • 關注微信回復關鍵詞“大禮包”,領80G學習資料
QQ交流群
領取免費網課
(加群備注“網站”)
IT培訓交流群 加入群聊 +
軟件測試 加入群聊 +
全鏈路UI/UE設計 加入群聊 +
Python+人工智能 加入群聊 +
互聯網營銷 加入群聊 +
Java開發 加入群聊 +
PHP開發 加入群聊 +
VR/AR游戲開發 加入群聊 +
大前端 加入群聊 +
大數據 加入群聊 +
Linux云計算 加入群聊 +
優就業官方微信
掃碼回復關鍵詞“大禮包”
領取80G學習資料

測一測
你適合學哪門IT技術?

1 您的年齡

2 您的學歷

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

獲取測試結果
 
課程資料、活動優惠 領取通道
 
 
久久国产精品偷_久久综合久久自在自线精品自_久久香蕉网国产免费