簡單理解python中的生成器

2021-10-12 21:52:58 字數 826 閱讀 9450

計算機的記憶體是有限的,所以像下面這樣的**會占用大量記憶體

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,執行後返回...