通過列表生成式,我們可以直接建立乙個列表。但是,受到記憶體限制,列表容量肯定是有限的。而且,建立乙個包含100萬個元素的列表,不僅占用很大的儲存空間,如果我們僅僅需要訪問前面幾個元素,那後面絕大多數元素占用的空間都白白浪費了。
所以,如果列表元素可以按照某種演算法推算出來,那我們是否可以在迴圈的過程中不斷推算出後續的元素呢?這樣就不必建立完整的list,從而節省大量的空間。在python中,這種一邊迴圈一邊計算的機制,稱為生成器:generator
import sys
def main()
: f =
[x for x in
range(1
,10)]
print
(f) f =
[x*x for x in
range(10
)]print
(sys.
getsizeof
(f)) # 檢視物件占用記憶體的位元組數
print
(f) f =
(x*x for x in
range(10
))print
(sys.
getsizeof
(f)) # 生成器不占用儲存資料的空間
print
(f)for val in f:
print
(val)
if __name__ ==
'__main__'
:main
()
>>>
next
(g)0
>>>
next
(g)1
>>>
next
(g)4
>>>
next
(g)9
>>>
next
(g)16
>>>
next
(g)25
>>>
next
(g)36
>>>
next
(g)49
>>>
next
(g)64
>>>
next
(g)81
>>>
next
(g)traceback
(most recent call last)
: file ""
, line 1,in
stopiteration
// 生成乙個斐波那契數列
def fib
(n):
a,b =0,
1for _ in
range
(n):
a,b = b,a+b
yield a
def main()
:for val in
fib(20)
:print
(val)
if __name__ ==
'__main__'
:main
()
函式是順序執行,遇到return語句或者最後一行函式語句就返回。而變成generator的函式,在每次呼叫next()的時候執行,遇到yield語句返回,再次執行時從上次返回的yield語句處繼續執行。
楊輝三角定義如下:
1
/ \1 1
/ \ / \
1 2 1
/ \ / \ / \
1 3 3 1
//期待輸出:
//[1]
//[1, 1]
//[1, 2, 1]
//[1, 3, 3, 1]
//[1, 4, 6, 4, 1]
//[1, 5, 10, 10, 5, 1]
//[1, 6, 15, 20, 15, 6, 1]
//[1, 7, 21, 35, 35, 21, 7, 1]
//[1, 8, 28, 56, 70, 56, 28, 8, 1]
//[1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
def ********s
(n):
l,index =[1
],0while index < n:
yield l
l =[1
]+[l[i]
+l[i+1]
for i in
range
(len
(l)-1)
]+[1
] index +=1
n =0
results =
for t in
********s(10
):print
(t) results.
(t) n = n +
1if n ==10:
break
if results ==[[
1],[
1,1]
,[1,
2,1]
,[1,
3,3,
1],[
1,4,
6,4,
1],[
1,5,
10,10,
5,1]
,[1,
6,15,
20,15,
6,1]
,[1,
7,21,
35,35,
21,7,
1],[
1,8,
28,56,
70,56,
28,8,
1],[
1,9,
36,84,
126,
126,84,
36,9,
1]]:
print
('測試通過!'
)else
:print
('測試失敗!'
)
python 生成器作用 Python生成器
生成器介紹 在函式內部包含yield關鍵字,那麼該函式執行的結果是生成器,生成器就是迭代器。生成器的功能 把函式結果做成迭代器 以一種優雅的方式封裝好iter,next 提供了一種自己定義迭代器的方式。使用生成器建立乙個迭代器 def a print a yield 11 使用yield,執行後返回...
python生成器好處 Python生成器筆記
python中三大器有迭代器,生成器,裝飾器,本文主要講述生成器。主要從生成器的概念,本質,以及yield關鍵字的使用執行過程。本質 生成器是一類特殊的迭代器,使用了yield關鍵字的函式不再是函式,而是生成器。使用了yield的函式就是生成器 1.yield關鍵字有兩點作用 1.1 yield語句...
python生成器函式 Python 生成器函式
一 生成器 生成器指的是生成器物件,可由生成器表示式得到,也可使用 yield 關鍵字得到乙個生成器函式,呼叫這個函式得到乙個生成器物件 生成器物件,是乙個可迭代物件,是乙個迭代器 生成器物件,是延遲計算 惰性求值的 1.1 生成器函式 函式體重包含 yield 語句的函式,就是生成器函式,呼叫後返...