什麼是生成器呢?
生成器就是一次生成乙個值的函式
就像是一把自動步槍,生成器中的值就它的子彈,槍平時都會有保險,在關保險的時候怎麼扣扳機都不會射出子彈
而自動步槍呢還可以單點和全自動兩個模式進行射擊.
舉個例子:
def這就是個簡單的生成器,當你呼叫func()的時候不會取出任何值而是產生了乙個生成器,func():
for i in range(100):
yield i
就像是給槍裝上了子彈,但是開了保險.
那麼,怎麼給槍關保險呢?
將函式賦給乙個變數
a = func()這就是給槍開保險.
既然開了保險了那麼怎麼射擊呢?
首先是單發:
print(a.__next__())一次取乙個值,這就是單發,想要在此取值重複此操作
這就是你射擊出來的子彈,但是稍微思考一下,如果是最後一發子彈怎麼辦?
程式會執行但是也會報錯
這個錯誤就告訴你子彈打光了
接下來說說全自動:
for item in其實就是乙個for迴圈,這樣就會把迭代器中的值全部取出來了,簡稱為"全自動"a:
print(item)
生成器的理解
在python中,一邊迴圈一邊計算的機制,稱為生成器 generator。列表所有資料都在記憶體中,如果有海量資料的話將會非常耗記憶體。如 僅僅需要訪問前面幾個元素,那後面絕大多數元素占用的空間都白白浪費了。如果列表元素按照某種演算法推算出來,那我們就可以在迴圈的過程中不斷推算出後續的元素,這樣就不...
理解 Python 生成器
什麼時候呼叫,什麼時候計算並返回值 生成器僅僅儲存了一套生成數值的演算法,並且沒有讓這個演算法現在就開始執行,而是我什麼時候調它,它什麼時候開始計算乙個新的值,並給你返回。在python中,一邊迴圈一邊計算的機制,稱為生成器 generator。列表耗記憶體 列表所有資料都在記憶體中,如果有海量資料...
對生成器的理解
迭代器 對於可迭代物件使用內建函式iter 獲取迭代器物件。迭代器物件通過next 方法來訪問裡面的元素 當容器中沒有可訪問的元素後,next 方法將會丟擲乙個stopiteration異常終止迭代器。列表生成式 例 x 2 for x in range n 生成器表示式 通列表解析語法,把列表解析...