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
 

猜你喜欢

转载自blog.csdn.net/luotuofeile/article/details/84316507
今日推荐