# def demo():
# for i in range(4):
# yield i
# g=demo()
# g1=(i for i in g)
# g2=(i for i in g1)
# print(list(g2))
# print(list(g1))

def add(n,i):
return n+i
def test():
for i in range(4):
yield i
g=test()
for n in [1,10]:
g=(add(n,i) for i in g)

# # g=(add(n,i) for i in g)
# n = 10
# g=(add(n,i) for i in (add(n,i) for i in g))
# print(list(g))

# for i in [1,2]:
# pass
#
# print(i)


import os

def init(func): #预激活生成器的一个装饰器
def wrapper(*args,**kwargs):
g=func(*args,**kwargs) #func是一个生成器函数,返回的g是一个生成器
next(g) #预激活生成器
return g #返回激活后的生成器g
return wrapper

@init #list_files = init(list_files) == wrapper
def list_files(target): #target = opener_g
while 1:
dir_to_search=yield
for top_dir,dir,files in os.walk(dir_to_search): #os.walk (路径,文件夹,文件)
for file in files: #从文件列表中获取一个一个的文件
target.send(os.path.join(top_dir,file)) #把文件的绝对路径传给了opener_g
@init #opener = init(opener) == wrapper
def opener(target): #target = cat_g
while 1:
file=yield #拿到了一个文件的路径
fn=open(file,encoding='utf-8') #打开文件获取了一个文件句柄
target.send((file,fn)) #cat_g发送了一个文件的路径和句柄
@init #cat = init(cat) == wrapper
def cat(target): #target = grep_g
while 1:
file,fn=yield #文件路径和文件的句柄
for line in fn:
target.send((file,line)) #文件路径,文件中的一行
@init #grep = init(grep) == wrapper
def grep(pattern,target): #要搜索的关键字,printer_g
lst = []
while 1:
file,line=yield #文件的路径和每一行
if pattern in line and file not in lst: #判断关键字是否在当前行
lst.append(file)
target.send(file) #printer_g.send文件路径
@init #printer = init(printer) == wrapper
def printer():
while 1:
file=yield #获取一个文件路径
if file:
print(file) #打印文件的路径:文件里包含了要搜索的关键字

g=list_files(opener(cat(grep('python',printer()))))
# g=list_files(opener(cat(grep('python',printer_g))))
# g=list_files(opener(cat(grep_g)))
# g=list_files(opener(catg)))
# g=list_files(opener_g)
g.send('D:\Python代码文件存放目录\S6\day18')

#用户给一个路径和关键字
#可以从一个文件路径中找到所有包含关键字的文件

posted on 2017-08-07 23:13  无痕5201314  阅读(206)  评论(0编辑  收藏  举报