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)