1 def add(n,i):
2 return n+i
3
4 def test():
5 for i in range(4):
6 yield i
7
8 g=test()
9 for n in [1,10]:
10 g=(add(n,i) for i in g)
11
12 print(list(g))
13
14 复制代码
15
16
17
18 复制代码
19 import os
20
21 def init(func):
22 def wrapper(*args,**kwargs):
23 g=func(*args,**kwargs)
24 next(g)
25 return g
26 return wrapper
27
28 @init
29 def list_files(target):
30 while 1:
31 dir_to_search=yield
32 for top_dir,dir,files in os.walk(dir_to_search):
33 for file in files:
34 target.send(os.path.join(top_dir,file))
35 @init
36 def opener(target):
37 while 1:
38 file=yield
39 fn=open(file)
40 target.send((file,fn))
41 @init
42 def cat(target):
43 while 1:
44 file,fn=yield
45 for line in fn:
46 target.send((file,line))
47
48 @init
49 def grep(pattern,target):
50 while 1:
51 file,line=yield
52 if pattern in line:
53 target.send(file)
54 @init
55 def printer():
56 while 1:
57 file=yield
58 if file:
59 print(file)
60
61 g=list_files(opener(cat(grep('python',printer()))))
62
63 g.send('/test1')
64
65 协程应用:grep -rl /dir