Py函数闭包
1. 定义
闭包是函数式编程的一个重要的语法结构,函数式编程是一种编程范式 (而面向过程编程和面向对象编程也都是编程范式)。
在面向过程编程中,我们见到过函数(function);
在面向对象编程中,我们见过对象(object);
函数和对象的根本目的是以某种逻辑方式组织代码,并提高代码的可重复使用性(reusability);
闭包也是一种组织代码的结构,它同样提高了代码的可重复使用性。
不同编程语言实现闭包的方式是不同的,python中闭包从表现形式上看,如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure)。
1 | # 闭包 = 函数块 + 定义函数时的环境 |
结合这段简单的代码和定义来说明闭包:
inner(y)
就是这个内部函数,对在外部作用域(但不是在全局作用域)的变量进行引用:x
就是被引用的变量,x
在外部作用域outer
里面,但不在全局作用域里,则这个内部函数inner
就是一个闭包。
再稍微讲究一点的解释是,闭包=函数块+定义函数时的环境,inner
就是函数块,x
就是环境,当然这个环境可以有很多,不止一个简单的x
。
在函数outer中定义了一个inner函数,inner函数访问外部函数outer的(参数)变量,并且把inner函数作为返回值返回给outer函数。