def add(s, x):
return s + x
def list():
return [0,1,2,3]
for x in [0,1,2,3]:
base = [add(i, x) for i in list()]
print(type(base))
print(base)
#可以认为 x 相对base = [add(i, x) for i in list()]来说是变化的。
#类似全局变量,最终x =3,所以结果就是[ 3+0, 3+1, 3+2, 3+3]。此时base是列表。
###################################
def add(s, x):
return s + x
def gen():
for i in range(4):
yield i
base = gen()
for n in [0,1,2,3]:
base = (add(i, n) for i in base)
print(type(base))
print(list(base))
#这段中,因为base是个生成器。这里的n会在最后执行print(list(base))时统一计算。过程类似于
#第一次循环之后(i用具体的数值进行表示,便于理解)
#base = (0+n,1+n,2+n,3+n)
#第二次循环之后:
#base = (add(i, n) for i in base)可以写成:
#base = (add(i, n) for i in (0+n,1+n,2+n,3+n)) 即
#base = (0+n+n,1+n+n,2+n+n,3+n+n)
#最终base=(0+n+n+n+n, 1+n+n+n+n, 2+n+n+n+n,3+n+n+n+n),n=3
#[12, 13, 14, 15]
运行结果如下:
<class 'list'>
[3, 4, 5, 6]
<class 'generator'>
[12, 13, 14, 15]
参考:
python生成器的惰性计算 :https://blog.csdn.net/weixin_43848579/article/details/88668095
理解Python闭包与延迟绑定:https://blog.csdn.net/xie_0723/article/details/53925076