和列表那種一下佔據長度為n的記憶體空間不同的是,生成器在呼叫的過程中逐步佔據記憶體空間,因此有著很大的優勢
def myfibbo(num):a,b=0,1
count=0
while counta,b=a+b,a
print(b)
count+=1
執行 :myfibbo(10)
def myfibbo(num):a,b=0,1
count=0
while counta,b=a+b,a
ret = yield
b#**執行到yield處,就會「繞道」執行下面的**
print(ret)
count+=1
s = myfibbo(10
)s.send(none)#第一次傳入值時要傳送none,因為第一次b這個變數已經承載了1這個值,而無法接收其他值,只能傳入none
print(next(s))
s.send("程勁
")#執行到yield b時,由於b正在計算,send的值替代了b作為結果返回給變數ret,b計算完成後返回給ret
print(next(s))
s.send("昌仔
")print(next(s))
s.send(
"勁兒弟弟")
print(next(s))
s.send(
"陳培昌")
print(next(s))
輸出結果:
none1程勁none2昌仔
none
5勁兒弟弟
none
13陳培昌
none
34
Python 生成器,協程
生成器可以簡單有效的建立龐大的可迭代物件,而不需要在直接在記憶體中建立儲存整個序列 可以使用生成器推導式或者生成器函式來建立生成器 生成器函式返回資料時使用yield語句,而不是使用return def countdown n print counting down from d n while n...
python迭代器生成器協程
迭代器有兩個基本的方法 iter 和next 把乙個類作為乙個迭代器使用需要在類中實現兩個方法iter 與next stopiteration 異常用於標識迭代的完成 class mylist object def init self self.items def iter self iter my...
python 生成器協程運算例項
一 yield執行方式 我們定義乙個如下的生成器 def put on name print hi 貨物來了,準備搬到倉庫!format name while true goods yield print 貨物 s 已經被 s搬進倉庫了。goods,name p put on bigberg 輸出g...