生成器函數(shù)_yield_yield from_send

生成器函數(shù)

'''
yield類似于return

相同:
   都返回出去一個值

不同:
   yield每次返回時, 會記錄當(dāng)前執(zhí)行的位置
   等下次調(diào)用生成器, 會從該位置向下走

   return 直接終止函數(shù)
'''


# 2. 生成器函數(shù)
def mygen():
   print('one')
   yield 1

   print('two')
   yield 2

   print('three')
   yield 3


# 創(chuàng)建生成器對象
gen = mygen()


# 使用next
res = next(gen)

'''
首先初始化生成器, 返回一個生成器對象

第一次調(diào)用: 執(zhí)行print('one'), yield返回1, 
暫停記錄當(dāng)前位置

第二次調(diào)用: 執(zhí)行print('two'), yield返回2,
暫停記錄當(dāng)前位置

第三次調(diào)用: 執(zhí)行print('three'), yield返回3,
暫停記錄當(dāng)前位置, 

此時生成器已經(jīng)不能在返回數(shù)據(jù), 再次調(diào)用就會報錯

'''

生成器寫斐波那契數(shù)列?

def fbnq(max_len):
   a = 0
   b = 1

   i = 0
   while i < max_len:
      yield b
      a, b = b, a + b
      # yield a
      i += 1


gen = fbnq(10)
for i in gen:
   print(i)

send

'''
next和send的區(qū)別:
   next: 只能取值
   send: 能取本次yield的返回值, 
   也能給上次yield傳入值.
   
send注意點:
   第一個send不能給yield傳值, 默認(rèn)寫None
   最后一個yield接收不到send的發(fā)送值
'''
def mygen():
   print('start')
   res = yield 1
   print(res)

   # res是send第二次的傳入值, yield把2返回給send
   res = yield 2
   print(res)

   res = yield 3
   print(res)


# 初始化生成器, 獲得生成器對象
gen = mygen()

# 第一次調(diào)用, send傳入None
yield_res = gen.send(None)
yield_res = gen.send('send1')
yield_res = gen.send('send2')
# 此時生成器已經(jīng)沒有數(shù)據(jù), 再次調(diào)用就會報錯
# yield_res = gen.send('send3')
# send和next可以混合使用
gen = mygen()
yield_res = gen.send(None)
yield_res = next(gen)
yield_res = next(gen)

yield from

把可迭代對象變成一個迭代器返回

def mygen():
   listvar = ["鼎泰亞", "李楠", "陳根基", "陳元勇"]

   yield from listvar


gen = mygen()

for i in gen:
   print(i)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 迭代、迭代器、生成器、協(xié)程、yield、greenlet、gevent、進(jìn)程線程協(xié)程對比、gevent多任務(wù)圖片下...
    Cestine閱讀 531評論 0 0
  • 包(lib)、模塊(module) 在Python中,存在包和模塊兩個常見概念。 模塊:編寫Python代碼的py...
    清清子衿木子水心閱讀 3,897評論 0 27
  • 昨天是我開始日更29天后的第二次斷更,第一次是24天時,利用復(fù)活卡又捱過了幾天,我又不想太湊合,所以終究還是斷了。...
    酉時七若閱讀 792評論 13 13

友情鏈接更多精彩內(nèi)容