Python 生成器的惰性机制
def add(a, b):
return a + b
def test():
for x in range(4):
yield x
g=test()
for n in [2, 10]:
g = (add(n, i) for i in g)
# 惰性机制,当n=2时并不会往里面代值,只有拿值的时候才会代值
# 后面出现list(),即拿值,这时往里代的值是n=10
# g = (add(n, i) for i in (add(n, i) for i in g)
print(list(g))
结果:
[20, 21, 22, 23]
for n in [2, 10]:
g = (add(n, i) for i in g)
可以把这段代码看作如下:
n=2
g = (add(n, i) for i in g) # 这里只是生成了一个生成器,如果不拿值,n=2是不会往里带的
n=10
g = (add(n, i) for i in g) # 后面出现list,所以才拿值,(add(n, i) for i in g)这里面
print(list(g)) #的g=(add(n, i) for i in g)什么时候拿值取什么值,这里是10
像__next__(),send(),list(),for循环都可以从生成器中拿值