python3學習筆記 生成器generator

2021-07-29 23:01:47 字數 1353 閱讀 9282

跟著廖大學python3一段日子了,這裡簡單了解下生成器generator,主要是yield的返回值和send的傳參,記錄下。

generator = 函式 + yield

簡單說,就是乙個函式,裡面用到了關鍵字yield,就成為了乙個生成器

生成器和函式的不同主要在於:

每次執行,會暫時中斷在yield關鍵字處,而且通過yield可以返回乙個引數

下次再接著執行,會從上次中斷的yield處接著執行,並可以通過send()傳遞引數,當然繼續中斷在下乙個yield處

如果通過send()或next()執行generator,而沒有找到下乙個yield,會報錯

總結就是:

return = next(a)

直接看下面的栗子,直觀明了

#生成器

deff

(): print('start')

a = yield

1#可以返回引數1,並接收傳遞的引數給a

print(a)

print('middle')

b = yield

2#可以返回引數2,並接收傳遞的引數給b

print(b)

print('next')

c = yield

3#可以返回引數3,並接收傳遞的引數給c

print(c) #這裡貌似永遠不會執行,因為總會在上一行的yield處結束

a = f() #這裡不會執行,即沒有任何列印資訊

#a.next() #這種寫法在python3裡面會報錯

return1 = next(a)#輸出start,中斷在yield 1處,返回yield後面的1給return1

#return1 = a.send(none) #效果同上一條語句

#return1 = a.send('test') #這裡會報錯

#如果首次執行generator,就傳遞乙個非none的引數,因為第一次執行不是從一般的中斷yield處執行起,所以沒有yield關鍵字來接收傳參,就會報錯

print(return1)

return2 = next(a)#傳入引數為none,即a=none,返回2給return2

print(return2)

return3 = a.send('msg')#傳入引數msg,即b=msg,返回3給return3

print(return3)

執行結果如下:

start

1none

middle

2msg

next

3[finished in

0.7s]

python3生成器 Python3 生成器

python3 生成器 閱讀 125 發布於 2020 05 19 14 29 25 在python中,一邊迴圈一邊計算出元素的機制,稱為生成器 generator。生成器的優點 一次返回乙個結果,延遲計算。這對於大資料量處理,是個非常有用的優勢。占用記憶體量是工程師必須考慮的乙個問題。提高 可讀性...

Python3基礎筆記 生成器

a x for x in range 10 b y 2 for y in range 10 deff n return n n n c f z for z in range 10 列表生成器會將所有的內容載入到記憶體中,在生成大量的資料時,會占用記憶體 生成器只會生成乙個 generator obj...

python3之生成器

斐波那契 fibonacci 數列列是乙個非常簡單的遞迴數列,除第乙個和第二個數外,任意乙個數都可由前兩個數相加 得到。用電腦程式輸出斐波那契數列的前 n 個數是乙個非常簡單的問題,許多初學者都可以輕易寫出如下函式 def fab max n,a,b 0,0,1 while n max print ...