zoukankan      html  css  js  c++  java
  • 递归/面向过程编程

    递归/面向过程编程

    返回首页

      面向过程的编程思想:就是机械化的流水线,下一步要紧接着上一步的结果,才能运行下去。在设计时,需要把整个流程

                    设计出来。

      面向过程的好处是:让程序简化复杂度,体系结构清晰。

      面向过程的坏处是:针对性很强,耦合度很强,可扩展性很差。应用场景不易经常变化。

       面向对象的案例:

    #grep -rl 'root' /etc
    
    import os,time
    
    def wrapper(func):
        def inner(*args,**kwargs):
            res = func(*args,**kwargs)
            next(res)
            return res
        return inner
    
    @wrapper
    def search(target):
        """
        找到文件的绝对路径
        target是生成器对象
        :return:
        """
        while True:
            dir_name = yield   #协程函数表达式,将路径传给dir_name
            print('车间search开始生产产品:文件路径')
            time.sleep(2)
            g = os.walk(dir_name)
            for i in g:
                for j in i[-1]:
                    file_path = '%s/%s' %(i[0],j)
                    target.send(file_path)  #将路径传出去。找到一个发一个。
                    # print(file_path)
    @wrapper
    def opener(target):
        """
        打开一个文件,获取文件的句柄。
        :return:
        """
        while True:
            file_path = yield  #接到路径
            print('车间opener开始生产产品:文件句柄')
            time.sleep(2)
            with open(file_path) as f:   #接到文件路径,打开文件
                target.send(f(file_path,f))  #send可以传多个值,但是要是元组的形式。
    @wrapper
    def cat(target):
        """
        读取文件内容
        :return:
        """
        while True:
            file_path,f = yield   #那到文件句柄,读文件
            print('车间cat开始生产产品:文件内容')
            time.sleep(2)
            for line in f:  #读文件。
                target.send((file_path,line))
    
    @wrapper
    def grep(pattern,target):
        """
        过滤一行内容里是否有关键字。
        :return:
        """
        while True:
            file_path,line = yield
            print('车间grep开始生产产品:文件关键字')
            time.sleep(2)
            if pattern in line:
                target.send(file_path)
    
    @wrapper
    def printer():
        """
        打印有关键字的文件路径
        :return:
        """
        while True:
            file_path = yield
            print('车间printer开始生产产品:文件路径了')
            time.sleep(2)
            print(file_path)
    
    g = search(opener(cat(grep('python',printer()))))
    # next(g)
    g.send("/etc")

    --------------- END --------------

  • 相关阅读:
    问题总结
    Https网络安全架构设计
    分布式ID生成策略
    [转]匿名内部类详解
    JAVA名词解释
    MQ实战
    手写SpringMVC实现
    多线程问答
    BIO、NIO实战
    spring中@Value("${key}")值原样输出${key}分析与解决
  • 原文地址:https://www.cnblogs.com/george92/p/13850972.html
Copyright © 2011-2022 走看看