Python的闭包使用

当函数存在嵌套,并且子函数引用了父函数中的变量,可以访问这些变量的作用域就形成了闭包,但是如果子函数没有访问父函数中的变量,就不存在闭包.

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

f1, f2, f3 = count()#f1(), f2(), f3()都是9

原式子中, i 并没有在f函数里面定义,而是去找的父函数的i变量,所以f和外部i构成闭包,i在range最后的取值为3,所以return fs的时候,闭包里面i的值基本确定了,每次调用的结果都是9.

def func():
    fs = []
    for i in range(1, 4):
        def inner(j = i):#把中间值保存下来,所以返回的是,1 4,9
            return j*j
        
        fs.append(inner)
    
    return fs

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

 

def func():
    fs = []
    for i in range(1, 4):
        def inner(x):#返回匿名函数
            return lambda x: x*x
        
        fs.append(inner(i))
    
    return fs

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

 

posted @ 2020-11-19 04:32  风不再来  阅读(114)  评论(0编辑  收藏  举报