通過列表生成式,我們可以直接創建一個列表。但是,受到內存限制,列表容量肯定是有限的。而且,創建一個包含100萬個元素的列表,不僅占用很大的存儲空間,如果我們僅僅需要訪問前面幾個元素,那后面絕大多數元素占用的空間都白白浪費了。
所以,如果列表元素可以按照某種算法推算出來,那我們是否可以在循環的過程中不斷推算出后續的元素呢?這樣就不必創建完整的list,從而節省大量的空間。在Python中,這種一邊循環一邊計算的機制,稱為生成器:generator。
g = (x * x for x in range(10))
g
通過next 函數一個一個的把數打印出來
next(g)
0
next(g)
1
next(g)
4
next(g)
9
當然,當范圍超過了9的時候,就會出現報錯,當然
我們一般不會使用這個方法
常見方法:
for n in g:
print n
這樣便避免了一系列的報錯
對于函數
出現yeild則就是一個生成器
這里,最難理解的就是generator和函數的執行流程不一樣。函數是順序執行,遇到return語句或者最后一行函數語句就返回。而變成generator的函數,在每次調用next()的時候執行,遇到yield語句返回,再次執行時從上次返回的yield語句處繼續執行。