1. 生成器的惰性机制: 生成器只有在访问的时候才取值. 说白了. 你找他要他才给你值. 找他要. 他是不会执行的.
def func(): print(111) yield 222 g = func() # ⽣成器g g1 = (i for i in g) # 生成器g1. 但是g1的数据来源于g g2 = (i for i in g1) # ⽣成器g2. 来源g1 print(list(g)) # 获取g中的数据. 这时func()才会被执行. 打印111.获取到222. g完毕. print(list(g1)) # 获取g1中的数据. g1的数据来源是g. 但是g已经取完了. g1 也就没有数据了 print(list(g2)) # 和g1同理
深坑==> 生成器. 要值得时候才拿值.
2
def add(a, b): return a + b def test(): for r_i in range(4): yield r_i # 0、1、2、3 g = test() for n in [2, 10]: g = (add(n, i) for i in g) print(list(g)) #把for循环拆分 对g进行分别命名 比较好理解 def add(a, b): return a + b def test(): for r_i in range(4): yield r_i # 0、1、2、3 g = test() n=2 g = (add(n, i) for i in g) #生成器惰性机制,只保存代码不运行 n=10 g = (add(n, i) for i in g) # g = (add(n, i) for i in (add(n, i) for i in g))
print(list(g))#此时才运行