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:\Users\Administrator\PycharmProjects\python18期周末班\day5\aaa')
# 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:\Users\Administrator\PycharmProjects\python18期周末班\day5\aaa')

g.send(r'C:\Users\Administrator\PycharmProjects\python18期周末班')  ##指定父目录
# a1.txt,a2.txt,b1.txt

  

posted @ 2017-12-12 21:46  xiechao  阅读(203)  评论(0编辑  收藏  举报
levels of contents