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 --------------

  • 相关阅读:
    算法的学习 — 冒泡排序
    自定义UICollectionLayout布局 —— UIKit之学习UICollectionView记录一《瀑布流》
    HDU 1541 Stars (线段树||树状数组)
    HDU 1617 Phone List (排序||字典树)
    CSU 1312 CX and girls (最短路)
    CSU 1320 Scoop water (卡特兰数)
    POJ 1838 Banana (并查集)
    POJ 1837 Balance (DP)
    POJ 1088 滑雪 (记忆化搜索)
    TYVJ 1261 可达总数 (BFS)
  • 原文地址:https://www.cnblogs.com/george92/p/13850972.html
Copyright © 2011-2022 走看看