python生成器的惰性计算

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

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值