zoukankan      html  css  js  c++  java
  • day5-python之面向过程编程

    一、面向过程编程

    #1、首先强调:面向过程编程绝对不是用函数编程这么简单,面向过程是一种编程思路、思想,而编程思路是不依赖于具体的语言或语法的。言外之意是即使我们不依赖于函数,也可以基于面向过程的思想编写程序
    
    #2、定义
    面向过程的核心是过程二字,过程指的是解决问题的步骤,即先干什么再干什么
    
    基于面向过程设计程序就好比在设计一条流水线,是一种机械式的思维方式
    
    #3、优点:复杂的问题流程化,进而简单化
    
    #4、缺点:可扩展性差,修改流水线的任意一个阶段,都会牵一发而动全身
    
    #5、应用:扩展性要求不高的场景,典型案例如linux内核,git,httpd
    
    #6、举例
    流水线1:
    用户输入用户名、密码--->用户验证--->欢迎界面
    
    流水线2:
    用户输入sql--->sql解析--->执行功能
    

    二、过滤文件内容  

    import os
    
    
    def init(func):
        def wrapper(*args, **kwargs):
            g = func(*args, **kwargs)
            next(g)
            return g
        return wrapper
    
    
    # 第一阶段:找到所有文件的绝对路径
    @init
    def search(target):
        while True:
            filepath = yield
            g = os.walk(filepath)
            for pardir, _, files in g:
                for file in files:
                    abspath = r'%s\%s' % (pardir, file)
                    target.send(abspath)
    
    
    # search(r'C:UsersAdministratorPycharmProjectspython18期周末班day5aaa')
    # g=search()
    # g.send(r'C:Python27')
    
    # 第二阶段:打开文件
    @init
    def opener(target):
        while True:
            abspath = yield
            with open(abspath, 'rb') as f:
                target.send((abspath, f))
    
    
    # 第三阶段:循环读出每一行内容
    @init
    def cat(target):
        while True:
            abspath, f = yield  # (abspath,f)
            for line in f:
                res = target.send((abspath, line))
                if res: break
    
    
    # 第四阶段:过滤
    @init
    def grep(pattern, target):
        tag = False
        while True:
            abspath, line = yield tag
            tag = False
            if pattern in line:
                target.send(abspath)
                tag = True
    
    
    # 第五阶段:打印该行属于的文件名
    @init
    def printer():
        while True:
            abspath = yield
            print(abspath)
    
    
    g = search(opener(cat(grep('os'.encode('utf-8'), printer()))))
    # g.send(r'C:UsersAdministratorPycharmProjectspython18期周末班day5aaa')
    
    g.send(r'C:UsersAdministratorPycharmProjectspython18期周末班')  ##指定父目录
    # a1.txt,a2.txt,b1.txt
    

      

  • 相关阅读:
    LLC半桥谐振变换器调试记录
    工业派学习记录
    ubuntu 命令记录
    电容单位换算
    Windows快捷键
    CAN总线学习笔记
    Scala 基础(十五):Scala 模式匹配(三)
    Scala 基础(十四):Scala 模式匹配(二)
    Scala 基础(十三):Scala 模式匹配(一)
    scala 数据结构(十一):流 Stream、视图 View、线程安全的集合、并行集合
  • 原文地址:https://www.cnblogs.com/xiechao621/p/8029920.html
Copyright © 2011-2022 走看看