計算機的記憶體是有限的,所以像下面這樣的**會占用大量記憶體
x =
[i**
2for i in
range
(100000000
)]
生成器就是為了解決這個問題而存在的,它不會存放所有的資料,而是要用乙個就生成乙個
yield關鍵字相當於斷點+return
def
gen():
yield
1yield
2yield
3t = gen(
)print
(next
(t))
print
(next
(t))
print
(next
(t))
#output
#1#2
#3
我們可以直觀地看到使用生成器後使用空間明顯變小
import sys
defgen
(n):
for i in
range
(n):
yield i
x =[i for i in
range
(666)]
t = gen(
666)
print
(sys.getsizeof(t)
)print
(sys.getsizeof(x)
)#output
#112
#5488
理解 Python 生成器
什麼時候呼叫,什麼時候計算並返回值 生成器僅僅儲存了一套生成數值的演算法,並且沒有讓這個演算法現在就開始執行,而是我什麼時候調它,它什麼時候開始計算乙個新的值,並給你返回。在python中,一邊迴圈一邊計算的機制,稱為生成器 generator。列表耗記憶體 列表所有資料都在記憶體中,如果有海量資料...
生成器的理解
在python中,一邊迴圈一邊計算的機制,稱為生成器 generator。列表所有資料都在記憶體中,如果有海量資料的話將會非常耗記憶體。如 僅僅需要訪問前面幾個元素,那後面絕大多數元素占用的空間都白白浪費了。如果列表元素按照某種演算法推算出來,那我們就可以在迴圈的過程中不斷推算出後續的元素,這樣就不...
python 生成器作用 Python生成器
生成器介紹 在函式內部包含yield關鍵字,那麼該函式執行的結果是生成器,生成器就是迭代器。生成器的功能 把函式結果做成迭代器 以一種優雅的方式封裝好iter,next 提供了一種自己定義迭代器的方式。使用生成器建立乙個迭代器 def a print a yield 11 使用yield,執行後返回...