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()))))
    复制代码
  • 相关阅读:
    vi—终端中的编辑器
    CSS Selector
    转: 通过WMI获取网卡MAC地址、硬盘序列号、主板序列号、CPU ID、BIOS序列号
    WMI入门教程之WMI中的类在哪里?
    WMI测试器
    WMI Explorer操作 和 powershell命令
    C++ WMI获取系统硬件信息(CPU/DISK/NetWork etc)
    使用C++进行WMI查询的简单封装
    ubuntu版本信息查看
    win10 修改文件夹右击默认打开程序
  • 原文地址:https://www.cnblogs.com/hui520/p/6536849.html
Copyright © 2011-2022 走看看