python協程初步 乙個生成器的實現

2022-02-03 07:34:25 字數 892 閱讀 5507

和列表那種一下佔據長度為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...