概念解析:
闭包(closure)是函数式编程的重要的语法结构。闭包也是一种组织代码的结构,它同样提高了代码的可重复使用性。
如果在一个内部函数里,对在外部函数内(但不是在全局作用域)的变量、参数进行引用,那么内部函数就被认为是闭包(closure)。
定义在外部函数内但由内部函数引用或者使用的变量称为自由变量。
有另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体。
总结一下,创建一个闭包必须满足以下几点:
(1)必须有一个内部函数
(2)内部函数必须引用外部函数中的变量或参数
(3)外部函数的返回值必须是内部函数
def outer(): name = "alex" def inner(): #条件1:inner就是内部函数 print("在inner里打印外层函数的变量",name) #条件2:引用外部函数的一个变量 return inner #条件3:外部函数的返回值是内部函数 f = outer() f()
闭包的意义:返回的函数对象,不仅仅是一个函数对象,在该函数外还包裹了一层作用域,这使得,该函数无论在何处调用,优先使用自己外层包裹的作用域。
装饰器就是一种闭包的应用,只不过其传递的参数是函数名。