python生成器 遞迴
阿新 • • 發佈:2018-12-01
生成器
生成器:只要函式體內出現yield關鍵字,那麼再執行函式就不會執行函式程式碼,會得到一個結果,該結果就是生成器 生成器就是迭代器 yield的功能 1、yield為我們提供了一種自定義迭代器物件的方法 2、yield於return的區別: 1)yield可以返回多個值 2)函式暫停和再繼續是由yield幫我們儲存的def test(): print('=== >1') yield 1 print('=== >2') yield 2 print('===>3') yield 3 g = test() #print裡的值由yield儲存 for i in g: print(i)
def test1(): for i in range(10): yield i g= test1() def test2(g): #呼叫生成器 for i in g: print(i) test2(g)
#監控日誌
import time def tail(filepath): #定義一個檢視檔案的函式 with open(filepath,'rb') as f: #以二進位制的形式開啟filepath f.seek(0,2) while True: #迴圈監控日誌 data = f.readline() #讀取檔案末尾 if data: #加入有資料就用yield返回 yield data else: #否則睡眠0.05秒 time.sleep(0.05) def grep(file,k): #定義過濾關鍵字函式 for i in tail(file): #迴圈生成器中的資料 if k in i.decode('utf-8'): #因為是用二進位制服務方式,所有需要解碼顯示 print(i.decode('utf-8')) # grep('a.txt',404) #監控a.txt最新日誌,並過慮404的錯誤程式碼
yield賦值
def test(name): while True: foot = yield print('%s正在吃%s' %(name,foot)) e = test('1807') next(e) #初始化 e._next_() e.send(None) #初始化 e.send('choudoufu') #傳送值傳給foot e.send('冰激凌')