• Python学习笔记8:面向过程编程


    面向过程编程

    面向过程编程是一种很有效的编程思路,其主要思想是将一个庞大的项目按照执行程序的过程进行细分,分成好几部分,没一部分都是单独的函数,前面函数的运行结果再传给后面的函数进行当做参数进行细分,最后得到终极结果

    面向过程编程的优点是思路清晰,参数修改方便,缺点是不利于函数后期的修改

    下面是根据面向过程编程模拟Linux系统的grep -rl 'root' /etc 命令,此函数的作用是递归查找文件夹中以及子文件夹中的所有含有root 的文件,我们把这条命令细化为五个功能,然后分别实现

    # 应用:grep -rl 'root' /etc 递归查找etc 下的含有root字符的文件
    
    import os
    
    # 编写装饰器,实现每调用一次生成器先进行一次next()功能
    def init(func):
        def wapper(*args, **kwargs):
            g = func(*args, **kwargs)
            next(g)
            return g
        return wapper
    
    
    # 1.递归查找文件路径,把路径发给2
    
    def search_path(target):
        all_path_file = os.walk('/Users/David/Desktop/oldboy/day5/yield表达式文件夹')
    
        for dire, _, files in all_path_file:
            for file in files:
                file_path = '%s/%s' % (dire, file)
                target.send(file_path)
    
    
    # 2.收到文件路径打开文件,获取文件对象,将文件对象发给3
    @init
    def opener(target):
        while True:
            file_path = yield
            with open(file_path, 'r', encoding='utf-8') as f:
                target.send((file_path, f))
    
    
    # 3.收到文件对象,for循环读取文件的每一行内容,把每一行内容发给4
    @init
    def reader(target):
        while True:
            file_path, file = yield
            for line in file:
                res = target.send((file_path, line))
                if res:
                    break
    
    
    # 4.收到一行内容,判断root是否在这一行中,如果在,把这一行内容发给阶段5
    @init
    def grep(target, seq):
        res = False
        while True:
            file_path, line = yield res
            res = False
            if seq in line:
                target.send(file_path)
                res = True
    
    
    # 5.收到文件名,打印结果
    @init
    def printer():
        while True:
            file_name = yield
            print(file_name)
    
    root = 'root'
    search_path(opener(reader(grep(printer(), root))))
    

    做题过程中容易犯错的几个点

    1. 刚开始的装饰器和以前的装饰器不一样,需按照实际情况改变
    2. 写生成器时注意加上while循环
    3. 写完生成器后注意@装饰器
    4. 需要sent两个值是注意只能以元组的形式sent
    5. 合理利用yield后加tag返回值来进行函数判断,另外返回tag后注意前后函数的变化
    6. 熟练掌握walk内置函数的使用方法
  • 相关阅读:
    Java基础学习笔记十 Java基础语法之final、static、匿名对象、内部类
    入门设计模式之桥梁模式
    入门设计模式之外观模式
    入门设计模式之策略
    入门设计模式之观察者
    入门设计模式之模板
    入门设计模式之原型
    入门设计模式之工厂
    几分钟几张图教你学会如何使用UML
    入门设计模式之建造者
  • 原文地址:https://www.cnblogs.com/rendawei/p/7051145.html
Copyright © 2020-2023  润新知