Python基础之面向过程编程

  要求:在文件里递归找到关于包含“Python”内容的文件的绝对路径并打印出来

#定义阶段
import os,time
def init(func): #装饰器的作用是使下面的生成器初始化,yield等着被传值
    def wrapper(*args,**kwargs):
        res = func(*args,**kwargs)
        next(res) #调用生成器初始化
        return res
    return wrapper
@init
def search(target):
    '''找到文件的绝对路径'''
    while True:
        dir_name = yield
        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) #
@init
def opener(target):
    '''打开文件,获取文件句柄'''
    while True:
        file_path = yield
        print("opener开始工作:获取文件句柄")
        time.sleep(2) #加上睡眠时间是为了使看着更有效果
        with open(file_path,encoding="utf8") as f:
            target.send((file_path,f))
@init
def cat(target):
    '''读取文件内容'''
    while True:
        file_path,f = yield
        print("cat开始工作:读取文件内容")
        time.sleep(0.3) #加上睡眠时间是为了使看着更有效果
        for line in f:
            target.send((file_path,line))
@init
def grep(pattern,target):
    '''过滤一行内容中有需要内容,就把路径传给下面'''
    while True:
        file_path,line = yield
        print("grep开始工作:过滤内容")
        if pattern in line :
            target.send(file_path)
@init
def printer():
    '''打印文件路径'''
    while True:
        file_path = yield
        print("printer开始工作:打印文件的绝对路径")
        time.sleep(2)
        print(file_path)
#调用阶段
g = search(opener(cat(grep("python",printer()))))
g.send("E:\michael")
---------------以下是输出结果------------------
    E:\michael\aa1.txt
    E:\michael\aa\a1.txt

  面向过程的编程思想:

    流水线式的编程思想,在设计程序时,需要把整个流程设计出来。

  优点:

    1:体系结构更加清晰

    2:简化程序的复杂度

  缺点:

    可扩展性极其的差,所以说面向过程的应用场景是,不需要经常变化的软件,如:linux内核,httpd,git等软件。

 

posted @ 2017-04-12 15:38  Michael--chen  阅读(290)  评论(0编辑  收藏  举报