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

python生成器 遞迴

生成器

生成器:只要函式體內出現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)