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 要找谁,传值给谁,就是要把谁做参数

浙公网安备 33010602011771号