协程函数应用

协程函数:即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  阅读(130)  评论(0编辑  收藏  举报

导航