python面向过程编程的

案例

# 模拟管道处理,grep -rl 'python' c:\adamandr

import os,time

def init(func):
    def wrapper(*args,**kwargs):
        res=func(*args,**kwargs)
        next(res)
        return res
    return wrapper

@init
def search(target):
    '找到文件的绝对路径'
    while True:
        dir_name=yield
        print('车间search开始生产产品:文件的绝对路径')
        time.sleep(0.3)
        g=os.walk(dir_name)
        for i in g:
            for j in i[-1]:
                file_path="%s/%s"%(i[0],j)
                target.send(file_path)


@init
def opener(target):
    '打开文件,获取文件句柄'
    while True:
        file_path=yield
        print("车间opener开始生产产品,文件句柄")
        with open(file_path) as f:
            target.send(file_path,f)


@init
def cat(target):
    '读取文件内容'
    while True:
        file_path,f=yield
        print("车间cat开始生产产品:文件的一行内容")
        time.sleep(0.3)
        for line in f:
            target.send((file_path,line))

@init
def grep(pattern,target):
    '过滤一行中有没有python'
    while True :
        file_path,line = yield
        print("车间grep开始生产产品,包含python这行内容的文件路径")
        time.sleep(0.2)
        if pattern in line:
            target.send(file_path)

@init
def printer():
    '打印文件路径'
    while True:
        file_path=yield
        print('车间printer开始生产产品:得到最终产品')
        time.sleep(0.3)
        print(file_path)


g1 = printer()
g2 = grep('python',g1)
g3 = cat(g2)
g4 = opener(g3)
g5 = search(g4)
# g=search(opener(cat(grep("python",printer()))))
g5.send("/Users/Alex/python")





def dd(target):
    while True:
        target = yield

g=dd("t")
g.send('aaa')
#关键的一句话,send()  传送的是自己的yield,所以调用的是他自己的时候,他是写给自己的yield。
# search 要找谁,传值给谁,就是要把谁做参数

  

posted @ 2017-09-11 19:05  Adamanter  阅读(189)  评论(0编辑  收藏  举报