python3生成器 Python3 生成器

2021-10-11 12:29:13 字數 956 閱讀 7276

python3 生成器

閱讀 (125) |

發布於 2020-05-19 14:29:25

在python中,一邊迴圈一邊計算出元素的機制,稱為生成器:generator。

生成器的優點:一次返回乙個結果,延遲計算。這對於大資料量處理,是個非常有用的優勢。占用記憶體量是工程師必須考慮的乙個問題。

提高**可讀性。使用生成器,**行數更少。

生成器有兩種表示形式:生成器函式:外表看上去像是乙個函式,但是沒有用return語句一次性的返回整個結果物件列表,使用yield語句一次返回乙個結果。

生成器推導式:類似列表推導式,將方括號換成了圓括號,返回按需產生的乙個結果物件,而不是構建乙個結果列表。

1. 生成器函式:

那麼究竟什麼是生成器呢?下面舉個栗子:def test():

print('start') #迴圈之前的語句只有在第一次呼叫時會被執行。

for i in range(1,10):

yield i #遇到 yield 關鍵字暫停,儲存當前所有的執行資訊,返回yield的值。

j = i+1 #下一次呼叫,從 yield 下一行開始執行。

print('第', j, "次呼叫")

a = test() #此時 a 就是乙個生成器。可以用來迭代。

print(next(a))

print(next(a))

print(next(a))

執行結果如下:

start

第 2 次呼叫

第 3 次呼叫

不過一般大部分時候,我們會使用for迴圈來迭代它。for i in a:

print(i)

2. 生成器推導式:

用生成器推導式來寫剛才的例子,就簡單多了。g = (x for x in range(1,10))

我們也來用 for 迴圈執行一下:for i in g:

print(i)

十 python3 生成器

生成器 generator 在 python 中,不必建立完整的 list,從而節省大量的空間。一邊迴圈一邊計算的機制。建立乙個 generator,有很多種方法。第一種方法很簡單,只要把乙個列表生成式的 改成 就建立了乙個 generator l x x for x in range 10 l 0...

Python3 生成器與yield

斐波那契數列指的是這樣乙個數列 1 1 2 3 5 8 13 21 34 importtime def fib times a 0 b 1 n 1 while n times print b a,b b,a b n 1 fib 7 生成器寫法 deffib times a 0 b 1 n 1 whi...

python 3 生成器 and 迭代器

迭代器官方文件 大多是的檔案物件可以用for迴圈語句,例如 for element in 1,2,3 print element for element in 1,2,3 print element for key in print key for char in 123 print char fo...