第五章 python的函数(9):闭包

什么是闭包?
我们先举个栗子: 在外部调用函数的内嵌函数(一般情况下函数的内嵌函数在外面是不可见的)

def outer():
    a1 = 'test arg'

    def inner():
        print('inner', a1)

    return inner  # 注意,这里返回的是inner函数的内存地址,而不是执行结果。执行结果需要带()。


func = outer()  # outer()的执行结果返回inner的内存地址,相当于inner

func()  # 这里func加()相当于inner()。这样就可以在外部调用内部的函数了。

原则上,函数执行完毕,函数的全部变量应该释放。 但是上述的例中,outer执行完后,a1变量并没有释放。
这是为什么呢?

因为内嵌函数inner()在外部被func()调用,使得enclosing函数outer()的作用域不能释放。 所以inner()的返回值依然可以调用outer()的a1变量。 这个现象我们称之为闭包。

  • 闭包的意义:返回的内嵌函数对象不仅是一个函数对象,在该函数外还包裹一层作用域(enclosing), 这使得该函数无论在何处调用,有限使用自己外层包裹的作用域

  • 特点:return内嵌函数

猜你喜欢

转载自www.cnblogs.com/py-xiaoqiang/p/11076888.html