递归/面向过程编程

递归/面向过程编程

返回首页

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

                设计出来。

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

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

   面向对象的案例:

#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://www.cnblogs.com/george92/p/13850972.html