生成器面试题1

 1 def demo():  # 生成器函数
 2     for i in range(4):
 3         yield i
 4 
 5 g = demo()  # 得到一个生成器,demo中的代码没有被执行
 6 
 7 g1 = (i for i in g)     # ()所以是生成器表达式,得到了一个生成器g1,生成器表达式的代码一句也没有被执行
 8 g2 = (i for i in g1)    # 生成器表达式,得到了一个生成器g2,生成器表达式的代码没有被执行
 9 
10 print(list(g1))     # [0, 1, 2, 3]      # 此时使用数据类型强制转换的方式从生成器g1中取值,所以g1对应的生成器表达式开始执行,全部执行完毕,g1生成器没有东西了
11 print(list(g2))     # []    # 此时取值,g2对应的表达式开始执行,表达式中遍历g1生成器,但是g1生成器值已经取完了,所以这里为[]
12 
13 # -------------------------------------------
14 
15 def add(n, i):
16     return n + i
17 
18 def test():
19     for i in range(4):
20         yield i
21 
22 g = test()
23 
24 for n in [1, 10]:
25     g = (add(n, i) for i in g)  # 拆开看
26 
27 print(list(g))  # [20, 21, 22, 23]
28 
29 
30 # n = 1
31 #g = (add(n, i) for i in test())
32 
33 # n = 2
34 # g = (add(n, i) for i in (add(n, i) for i in test()))
35 
36 #list(g)
View Code

猜你喜欢

转载自www.cnblogs.com/whylinux/p/9623488.html