跟著廖大學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 ...