語法上和函式類似:生成器函式和常規函式幾乎是一樣的。它們都是使用def語句進行定義,差別在於,生成器使用yield語句返回乙個值,而常規函式使用return語句返回乙個值。
自動實現迭代器協議:對於生成器,python會自動實現迭代器協議,以便應用到迭代背景中,(如for迴圈,sum函式)。由於生成器自動實現了迭代器協議,所以,我們可以呼叫它的next方法,並且,在沒有值可以返回的時候,生成器自動產生stopiteration異常
狀態掛起:生成器使用yield語句返回乙個值。yield語句掛起該生成器函式的狀態,保留足夠的資訊,以便之後從它離開的地方繼續執行
優點一:生成器的好處是延遲計算,一次返回乙個結果。也就是說,它不會一次生成所有的結果。這對於大資料量處理,將非常有用。
#列表解析
print(sum([i for i in range(100)]))#
占用記憶體大,機器容易卡死
#生成器表示式
print(sum(i for i in range(100)))#
幾乎不佔記憶體
defxiadan():
for i in range(10000):
yield
'雞蛋%s
'%i #
alex_lmj =xiadan()
for jidan in
alex_lmj:
print(jidan)
優點二:
生成器還能有效提高**可讀性
defxiadan():
ret=
for i in range(100):
'雞蛋%s
'%i)
return
retdef
xiadan():
for i in range(10000):
yield
'雞蛋%s
'%i
day19 生成器函式
語法上和函式類似 生成器函式和常規函式幾乎是一樣的。它們都是使用def語句進行定義,差別在於,生成器使用yield語句返回乙個值,而常規函式使用return語句返回乙個值。自動實現迭代器協議 對於生成器,python會自動實現迭代器協議,以便應用到迭代背景中,如for迴圈,sum函式 由於生成器自動...
day19 生成器 函式遞迴
目錄 二 三元表示式 三 生成式 四 函式的遞迴 前引 上節課思考 多個裝飾器的載入和執行分析 def deco1 func1 func1 warpper2 res1 func1 args,kwargs return res1 def deco2 func2 func2 warpper3 res2 ...
day19 生成器,迭代器
一 列表解析 l1 雞蛋 s i for i in range 10 if i 5 print l1 雞蛋6 雞蛋7 雞蛋8 雞蛋9 這種方法比較佔記憶體,因為要先生成列表,列表佔記憶體 print sum i for i in range 100000000 這種方法計算 1 10000000 的...