Loading

坑集系列

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 # 0123

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 # 0123

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))#此时才运行

 

posted @ 2019-01-14 13:23  Ellisonzhang  阅读(132)  评论(0编辑  收藏  举报