python面向过程编程的
案例
# 模拟管道处理,grep -rl 'python' c:\adamandr import os,time def init(func): def wrapper(*args,**kwargs): res=func(*args,**kwargs) next(res) return res return wrapper @init def search(target): '找到文件的绝对路径' while True: dir_name=yield print('车间search开始生产产品:文件的绝对路径') time.sleep(0.3) g=os.walk(dir_name) for i in g: for j in i[-1]: file_path="%s/%s"%(i[0],j) target.send(file_path) @init def opener(target): '打开文件,获取文件句柄' while True: file_path=yield print("车间opener开始生产产品,文件句柄") with open(file_path) as f: target.send(file_path,f) @init def cat(target): '读取文件内容' while True: file_path,f=yield print("车间cat开始生产产品:文件的一行内容") time.sleep(0.3) for line in f: target.send((file_path,line)) @init def grep(pattern,target): '过滤一行中有没有python' while True : file_path,line = yield print("车间grep开始生产产品,包含python这行内容的文件路径") time.sleep(0.2) if pattern in line: target.send(file_path) @init def printer(): '打印文件路径' while True: file_path=yield print('车间printer开始生产产品:得到最终产品') time.sleep(0.3) print(file_path) g1 = printer() g2 = grep('python',g1) g3 = cat(g2) g4 = opener(g3) g5 = search(g4) # g=search(opener(cat(grep("python",printer())))) g5.send("/Users/Alex/python") def dd(target): while True: target = yield g=dd("t") g.send('aaa') #关键的一句话,send() 传送的是自己的yield,所以调用的是他自己的时候,他是写给自己的yield。 # search 要找谁,传值给谁,就是要把谁做参数