python中对闭包的理解(2)

上一篇介绍了闭包的概念,这一篇介绍下闭包的使用过程中需要注意的问题。

def count():
    fs = []
    for i in range(1,4):
        def f():
            return i*i
        fs.append(f)
    return fs

f1, f2, f3 = count()
print(f1())
print(f2())
print(f3())

执行结果:

9
9
9

上述代码中,每次循环返回函数f,其中保存了变量i,循环结束后返回了三个函数,此时i变成了3,此时再去执行三个函数时,都会返回3*3=9,所以闭包中的返回函数不要引用后续会发生变化的变量。

如果一定要引用循环中的变量,可以再定义一个函数,把结果保存在该函数返回值中,后续变量发生变化,该函数里的结果不会变化

def count():
    fs = []
    def f(j):
        def g():
            return j*j
        return g
    for i in range(1,4):
        fs.append(f(i))  #此时执行了函数f(i),所以i的当前值被传入并把函数执行结果保存在函数g中。
    return fs
f1, f2, f3 = count()
print(f1())
print(f2())
print(f3())

执行结果:

1
4
9
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值