一、面向过程编程
#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