zoukankan      html  css  js  c++  java
  • 协程函数应用

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

    打印结果如下:

  • 相关阅读:
    布隆过滤器(Bloom Filter)
    什么是分布式账本
    什么是非对称加密?非对称加密算法介绍
    ANDROID DisplayManager 服务解析一
    ANDROID DisplayManager 服务解析一
    ANDROID DisplayManager 服务解析一
    ANDROID DisplayManager 服务解析一
    第1章 数据结构绪论
    第1章 数据结构绪论
    第1章 数据结构绪论
  • 原文地址:https://www.cnblogs.com/hanhan914-wang/p/7606974.html
Copyright © 2011-2022 走看看