zoukankan      html  css  js  c++  java
  • python协成与面向过程编程

    初步了解协程

    复制代码
    def eater():
        print('start to eat')
        while True:
            food=yield
            print('is eating food:%s'%food)
    
    def producer():
        dog=eater()
        next(dog) # 先next一次唤醒协程函数
        #然后下面的操作都是dog.send(值)
        food1='黄瓜'
        food2='茄子'
        dog.send(food1)
        dog.send(food2)
    producer()
    
    输出结果:
    start to eat
    is eating food:黄瓜
    is eating food:茄子

    面向过程编程

    #实现grep -rl 'python' /root/

    复制代码
    import os
    
    import functools
    def init(func):
        @functools.wraps(func) #让warpper的帮助信息同eater相同
        def warpper(*args,**kwargs):
            '我是warpper函数'
            g=func(*args,**kwargs)
            next(g)
            return g
        return warpper
    
    #面向过程的编程
    #扩展性差
    def get_file(abs_path,target):
        '''
        生产一个个文件
        :param abs_path:传进来的决对路径
        :param target: 下一个目标
        :return: 返回绝对文件的路径
        '''
        g=os.walk(abs_path)
        for top_dir,current_dir,files in g:
            for file in files:
                abs_file_path=r'%s\%s' %(top_dir,file)
                target.send(abs_file_path)
    
    @init
    def opener(target):
        '''
        打开文件
        :return: 返回句柄
        :param target 下一个目标
        '''
        while True:
            abs_file_path=yield
            with open(abs_file_path) as f:
                target.send((f,abs_file_path))
    
    @init
    def get_lines(target):
        '''
        读取每一行的内容
        :param target: 下一个目标
        :return:返回每一行的内容
        '''
        while True:
            f,abs_file_path=yield
            for line in f:
                target.send((line,abs_file_path))
    
    @init
    def grep(pattern,target):
        '''
        过滤关键字
        :param pattern:匹配关键字 
        :param target: 下一个目标
        :return: 返回文件
        '''
        while True:
            line,abs_file_path=yield
            if pattern in line:
                target.send(abs_file_path)
    
    @init
    def printer():
        '''
         打印功能
        :return:输出信息 
        '''
        while True:
            abs_file_path=yield
            print(abs_file_path)
    
    
    get_file(r'D:	est',opener(get_lines(grep('zzl',printer()))))
    复制代码
  • 相关阅读:
    203. Remove Linked List Elements
    python练习小程序
    五十音练习小软件
    CocosCreator生命游戏
    一个swift下载程序
    用excel做一幅像素画
    翻译一篇SpiderMonkey GC的文章
    unity-3d拼图游戏
    NDK编译Python2.7.5
    git命令简图
  • 原文地址:https://www.cnblogs.com/hui520/p/6536849.html
Copyright © 2011-2022 走看看