協程函數、遞歸調用

一、消費者生產者模型初級app

二、獲取指定目錄下子目錄與文件ide

三、遞歸調用函數

 

--消費者生產者模型初級idea

def eater(name):
    print('%s start to eat' %name )
    while True:
        food = yield
        print('%s eat %s' %(name,food))
        
        
alex_g = eater('alex')#先得到生成器
next(alex_g)#觸發函數使函數暫停到函數的yield
alex_g.send('骨頭')#給yield發送個值,使yield賦值給food,而後執行函數

 


--#改進使其能交互,並使生產者獲取清單保存消費項目spa

def eater(name):
    food_list =[]
    print('%s start to eat' %name )
    while True:
        food = yield food_list
        food_list.append(food)
        print('%s eat %s' %(name,food))

def producter():
    alex_g = eater('alex')  # 先得到生成器
    next(alex_g)  # 觸發函數使函數暫停到函數的yield
    while True:
        inp = input('>>>')
        print(alex_g.send(inp))#給yield發送個值,使yield賦值給food,而後執行函數
producter()

 

--改進使初始化咋裝飾器中進行code

def init(func):
    def wapper(*args,**kwargs):
        alex_g = func(*args,**kwargs)  # 先得到生成器
        next(alex_g)  # 觸發函數使函數暫停到函數的yield
        return alex_g
    return wapper

@init
def eater(name):
    food_list =[]
    print('%s start to eat' %name )
    while True:
        food = yield food_list
        food_list.append(food)
        print('%s eat %s' %(name,food))

def producter():
    g = eater('alex')#調用eater函數--》裝飾器執行func(alex)得到生成器--》使暫停到eater的yield--》執行裝飾器中初始化--》將生成器返回給g
    while True:
        inp = input('>>>')
        print(g.send(inp))#給yield發送個值,使yield賦值給food,而後執行函數
producter()

 

--獲取指定目錄下子目錄與文件xml

import os
t = os.walk(r'C:\Users\liguangxu\PycharmProjects\untitled2')#這裏會得到一個迭代器
print(next(t))
#得到該目錄下的子目錄與文件,元組的第一個元素爲指定目錄,第二個元素爲目錄下的文件夾,第三個元素爲指定目錄的文件
#('C:\\Users\\liguangxu\\PycharmProjects\\untitled2', ['.idea', '111', 'day3', 'day4', 'day5'], [])
print(next(t))
#第一個元素爲第一個指定目錄下的文件夾,第二個元素爲第一個指定目錄下的文件夾下的文件夾,第三個爲指定目錄下的第一個目錄下的文件
#('C:\\Users\\liguangxu\\PycharmProjects\\untitled2\\.idea', [], ['misc.xml', 'modules.xml', 'untitled2.iml', 'workspace.xml'])
#想要獲取指定目錄下的全部文件的絕對路徑的方法
import os
t = os.walk(r'C:\Users\liguangxu\PycharmProjects\untitled2')
for pardir,_,files in t:#將第一個元素(目錄)和第三個元素(目錄下的文件)拿到作拼接
for file in files:
abspath = r'%s\%s'%(pardir,file)
print(abspath)

 

--遞歸調用
#遞歸調用:在調用一個函數的過程當中,直接或者間接的調用了函數自己
#效率低,必須有一個明確的結束條件,沒進入更深一層遞歸時,問題規模相比上一次遞歸減小
#查看遞歸層級 sys.getrecursionlimit() 修改遞歸層級 sys.getrecursionlimit()blog

def  age(n):
    if n == 1:
        return 18
    return age(n-1)+2
print(age(5))

l = [1,2,[3,4,5,6,[7,8,9,[10,11,12]]]]
def li(l):
    for item in l:
        if type(item) is list:
            li(item)
        else:
            print(item)
    
相關文章
相關標籤/搜索