协程函数应用

协程函数:即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')

打印结果如下:

原文地址:https://www.cnblogs.com/hanhan914-wang/p/7606974.html