1. 程式人生 > >day5-python之面向過程編程

day5-python之面向過程編程

**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之面向過程編程