day19 生成器函式

2022-06-17 23:33:14 字數 1068 閱讀 2866

語法上和函式類似:生成器函式和常規函式幾乎是一樣的。它們都是使用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)))#

幾乎不佔記憶體

def

xiadan():

for i in range(10000):

yield

'雞蛋%s

'%i #

alex_lmj =xiadan()

for jidan in

alex_lmj:

print(jidan)

優點二:

生成器還能有效提高**可讀性

def

xiadan():

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 的...