python函數第5天(day 24)
阿新 • • 發佈:2017-08-23
eat style python 通過 返回 for end 位置 sta
可叠代的:對象下有__iter__方法的都是可叠代的對象 叠代器:對象.__iter__()得到的結果就是叠代器 叠代器的特性: 叠代器.__next__() 取下一個值 優點: 1.提供了一種統一的叠代對象的方式,不依賴於索引 2.惰性計算 缺點: 1.無法獲取叠代器的長度 2.一次性的,只能往後取值,不能往前退,不能像索引那樣去取得某個位置的值 生成器:函數內帶有yield關鍵字,那麽這個函數執行的結果就是生成器 生成器本質就是叠代器def func(): n=0 while True: yield n n+=1 g=func() res=next(g) res=next(g) for i in g: pass 總結yield的功能: 1.相當於把__iter__和__next__方法封裝到函數內部 2.與return比,return只能返回一次,而yield能返回多次 3.函數暫停已經繼續運行的狀態是通過yield保存的 yield的表達式形式: food=yield def eater(name): print(‘%s start to eat‘ %name) while True: food=yield print(‘%s eat %s‘ %(name,food)) e=eater(‘zhejiangF4‘) #e.send與next(e)的區別 #1.如果函數內yield是表達式形式,那麽必須先next(e) #2.二者的共同之處是都可以讓函數在上次暫停的位置繼續運行,不一樣的地方在於 send在觸發下一次代碼的執行時,會順便給yield傳一個值#協程函數的定義? #協程函數的應用?
python函數第5天(day 24)