1. 程式人生 > >python生成器 遞歸

python生成器 遞歸

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)

技術分享圖片技術分享圖片

#監控日誌

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(冰激淩)

遞歸調用:在調用一個函數的過程中,直接或者間接又調用了函數本身,稱之為遞歸調用

遞歸必備的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生成器 遞歸