协程函数应用
协程函数:即yield为表达式的形式
python实现grep -rl 'python' C:\egon" 功能
#为生成器添加装饰器 def init(func): def warpp(*args,**kwargs): res=func(*args,**kwargs) next(res) #为生成器添加next(res)初始化功能 return res return warpp #找到一个绝对路径,往下一个阶段发一个。。 @init def search(target): '找到文件的绝对路径' while True: file_name=yield #file_name='C\\egon print('车间opener开始生产文件路径。。。') time.sleep(2) g=os.walk(file_name) for i in g: # print(i) 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('车间cat开始获取文件句柄。。。') time.sleep(2) with open(file_path) as f: target.send((file_path,f)) @init def cat(target): '读取文件内容' while True: file_path,f=yield print('车间grep开始读取文件内容') time.sleep(1) for line in f: target.send((file_path,line)) @init def grep(pattern,target): '过滤一行内容中有无python' while True: file_path,line=yield print('车间printer开始打开文件路径。。') time.sleep(2) if pattern in line: target.send(file_path) @init def printer(): '打印文件路径' while True: file_path=yield print(file_path) g=search(opener(cat(grep('python',printer())))) g.send('C:\\egon')
打印结果如下:
posted on 2017-09-28 15:39 hanhan914wang 阅读(131) 评论(0) 编辑 收藏 举报