標籤:面向過程 war 列表 return end 函數 while wal 面向
一.協程函數的應用
寫一個裝飾器用於讓協程函數不需要輸入再執行一次next()函數
分析: 在裝飾器中產生該協程函數的產生器, 並且執行一次next()函數
def firstNext(func): def wrapper(*args, **kwargs): g = func(*args, **kwargs) next(g) return g return wrapper @firstNextdef eater(name): print("{} start to eat".format(name)) food_list = [] while True: food = yield food_list print("{} eat {}".format(name, food)) food_list.append(food) g = eater("egon")print(g.send("包子"))print(g.send("炸醬麵"))
二.面向過程編程
實現 grep -rl ‘python‘ c:/test 的功能
一個函數實現
import os def search(dir_name, partten): g = os.walk(dir_name) res = {"",} for i in g: for j in i[-1]: file_path = i[0] + "\\" +j with open(file_path) as f: for line in f: if partten in line: res.add(file_path) for line in res: if line: print(line) search("c:\\test", "python")利用產生器來處理import os def firstNext(func): def wrapper(*args, **kwargs): g = func(*args, **kwargs) next(g) return g return wrapper @firstNextdef search(target): while True: dir_name = yield g = os.walk(dir_name) for i in g: for j in i[-1]: file_path = i[0] + "\\" +j target.send(file_path) @firstNextdef opener(target): while True: file_path = yield with open(file_path) as f: target.send((file_path, f)) @firstNextdef cat(target): while True: file_path, f = yield for line in f: target.send((file_path, line)) @firstNextdef grep(partten, target): while True: file_path, line = yield if partten in line: target.send(file_path) @firstNextdef printer(): while True: file_path = yield print(file_path) g = search(opener(cat(grep("python",printer()))))g.send("c:\\test")
三.列表產生式,產生器運算式
列表產生式的具體形式
列表 = [處理變數形成列表元素 for迴圈 if判斷 for迴圈2]
等同於
for迴圈 if判斷 for迴圈 元素=運算式 列表.append(元素)
產生器運算式是 列表產生式的中括弧編程圓括弧
其中獲得的是一個產生器
可以通過 list(獲得的產生器) 來快速產生一個列表
python\列表和產生器運算式