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