【Python培訓基礎知識】Python生成器函式
對於程式而言,記憶體也是很重要的,因為程式中很多資料都是儲存在記憶體中的,如果記憶體中儲存的資料過多,那麼系統就會崩潰,這是人們不希望發生的。
可以採用生成器推導式來解決記憶體不足的問題。例如,利用生成器推導式建立一個生成器n,資料為1~33數字,可以寫成n = (i for i in range(1, 34))。這樣當程式需要一個數時,程式才生成資料,可以節省記憶體。然而生成器推導式太過簡單,只能用一行程式碼的形式實現,如果要建立複雜的生成器,如建立一個生成器f,生成前10個斐波那契數字,生成器推導式已經不能滿足需求了,因為斐波那契數列最開始的兩個數都無法賦值。
函式可以實現複雜的功能,然而要節省記憶體,就需要使用生成器函式。生成器函式與普通函式的區別是函式中包含關鍵字yield。實際上只要含有yield關鍵字的函式就是生成器函式。
生成器函式是用函式實現生成器。定義生成器函式的語法格式如下:
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……以此類推,就得到了整個斐波那契數列。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69996644/viewspace-2764535/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Python培訓教程之Python基礎知識點梳理Python
- 【Python培訓基礎知識】單例模式Python單例模式
- Python基礎函式使用知識Python函式
- python,函式各種基礎知識Python函式
- Python培訓入門基礎知識學什麼?Python
- 好程式設計師Python培訓分享Python入門基礎知識程式設計師Python
- python基礎知識之函式初階——閉包Python函式
- python基礎知識Python
- python 基礎知識Python
- python基礎函式Python函式
- Python基礎-函式Python函式
- python函式基礎Python函式
- java培訓基礎知識都學哪些Java
- Python知識體系-Python2基礎知識Python
- Python基礎知識1Python
- Python基礎知識整理Python
- Python基礎知識分享Python
- Python培訓基礎教程都教哪些Python
- python-函式基礎Python函式
- python基礎之函式Python函式
- Python基礎(六) 函式Python函式
- Python基礎(10):函式Python函式
- Python培訓:Python有哪些函式?你瞭解幾種?Python函式
- 基礎的python知識3(布林表示式)Python
- Python基礎知識之字典Python
- Python基礎知識之集合Python
- Python基礎知識架構Python架構
- Python基礎知識之二Python
- Python——基礎知識細節Python
- Python基礎知識點梳理Python
- python基礎--函式全解析Python函式
- python基礎7 - 函式2Python函式
- 《Python 基礎篇》五:函式Python函式
- 五、Python函式之基礎Python函式
- Python分散式爬蟲(三) - 爬蟲基礎知識Python分散式爬蟲
- Python培訓教程:Python有哪些比較重要的內建函式?Python函式
- Python基礎知識入門(二)Python
- Python入門基礎知識(二)Python