day5-python之面向過程編程
阿新 • • 發佈:2017-12-13
**kwargs http users 二階 可擴展 send filepath with log
一、面向過程編程
#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
day5-python之面向過程編程