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()))))
    复制代码
  • 相关阅读:
    “不裁员”才是公司度过艰难时期的聪明选择
    oracle服务端与客户端字符集不同导致中文乱码解决方案
    [转]ABAP数据库操作系列(5)
    [转]ABAP数据库操作系列(2)
    [转]整理的函数
    [转]ABAP数据库操作系列(6)
    [转]ABAP数据库操作系列(7)
    [转]Authoritycheck
    [转]ABAP Program to Display SAP Icons
    [转]ABAP数据库操作系列(3)
  • 原文地址:https://www.cnblogs.com/hui520/p/6536849.html
Copyright © 2011-2022 走看看