Python生成器和協程 學習筆記

什麼是生成器

  1. 可以生成值的函數
  2. 當一個函數有了yield關鍵字就成了生成器
  3. 可以掛起執行並保持當前執行狀態的
def my_gen():
    yield 'first'
    yield 'second'

gen = my_gen()
print(next(gen))
print(next(gen))

基於生成器的協程

注:Python3前之前沒有原生協程,只有基於生成器的協程
注:Python3.5後開始引入 async/await 支持原生協程

  1. 生成器可以通過yield暫停執行和產出數據
  2. 同時支持send()向生成器發送數據和throw()向生成器拋出異常

協程的注意點:

  1. 協程需要send(None)或者next(gen)來預激才能啓動
  2. 在yield處協程會暫停執行
  3. 單獨的yield value會把產出值給調用方
  4. 通過send發送值,值會賦予給yield的的左邊變量
  5. 協程完成後會拋出StopIteration異常
發佈了16 篇原創文章 · 獲贊 6 · 訪問量 2620
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章