python生成器 遞歸
阿新 • • 發佈:2018-12-01
rtb rmi iic gap brep ext ihs eem stub
生成器
生成器:只要函數體內出現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)
#監控日誌
importtime 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(‘冰激淩‘)
遞歸調用:在調用一個函數的過程中,直接或者間接又調用了函數本身,稱之為遞歸調用
遞歸必備的2個階段: 1遞歸 2 回溯 age(5) = age(4) + 2 age(4) = age(3) + 2 age(3) = age(2) + 2 age(2) = age(1) + 2 age(1) = 0 def love(n): if n == 1: return 0 return love(n-1) + 2 res = love(5) print(res)python生成器 遞歸