day15 作业/面试题

1、处理文件,用户指定要查找的文件和内容,将文件中包含要查找内容的每一行都输出到屏幕。

 1 def files(filename):
 2     with open(filename,mode='r',encoding='utf-8') as f:
 3         for line in f:
 4             if "python" in line:
 5                 yield line.strip()
 6 
 7 g=files("python")
 8 for i in g:
 9     print(i)
10 
11 
12 #修改
13 
14 def files(filename,aim):
15     with open(filename,mode='r',encoding='utf-8') as f:
16         for line in f:
17             if aim in line:
18                 yield line.strip()
19 
20 g=files("python","python")
21 for i in g:
22     print(i)

2、写生成器,从文件中读取内容,在每一次读取到的内容之前加上‘***’之后再返回给用户。

1 def files(filename):
2     with open(filename,mode='r',encoding='utf-8') as f:
3         for line in f:
4             yield "***"+line.strip()
5 
6 g=files("python")
7 for i in g:
8     print(i)

 3、生成器相关面试题

 1 def demo():
 2     for i in range(4):
 3         yield i
 4 
 5 g=demo()
 6 
 7 g1=(i for i in g)
 8 g2=(i for i in g1)
 9 
10 #print(g1)    #<generator object <genexpr> at 0x000002A9BB6FB410>
11 print(list(g1))
12 print(list(g2))   
13 
14 
15 结果:
16 [0, 1, 2, 3]
17 []
18 
19 分析:
20 代码从上到下执行,执行到g2=(i for i in g1)时,生成器并没有开始调用,因为生成器的惰性。当到print(list(g1))时,生成器才开始执行,
这时g1强转为列表,所以g1为[0, 1, 2, 3]。当g2取值的时候,g1的值已经被list取出来了(生成器只能被取一次),g1已经空了,所以g2为空。
 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 
10 for n in [1,10]:
11     g=(add(n,i) for i in g)
12 
13 
14 print(list(g))
15 
16 结果:
17 [21, 22, 23, 24]
18 
19 
20 # 分析:
21 # 
22 # n = 1
23 # g1 = (add(n, i) for i in g)
24 # n = 10
25 # g2 = (add(n, i) for i in g)
26 # 
27 # (1)替换:g替换成了g1, n = 10
28 #     g2 = (add(n, i) for i in (add(n, i) for i in g))
29 # 
30 # (2)g又替换成了test(), n = 10
31 #     g2 = (add(n, i) for i in (add(n, i) for i in test()))
32 # 
33 # (3)test() == > (1, 2, 3, 4), n = 10
34 #     g2 = (add(n, i) for i in (add(n, i) for i in (1, 2, 3, 4)))
35 # 
36 # (4)(add(n, i) for i in (1, 2, 3, 4) == > (11, 12, 13, 14), n=10
37 #     g2 = (add(n, i) for i in (11, 12, 13, 14))
38 #     
39 # (5)结果:
40 #     g2 = (21, 22, 23, 24)

猜你喜欢

转载自www.cnblogs.com/caili/p/9779370.html