Python
闭包的应用
闭包(
Closure
)是词法闭包(
Lexical Closure
)的简称。对闭包的具体定义有很多
种说法,这些说法大体可以分为两类:
一种说法认为闭包是符合一定条件的函数,比如参考资源中这样定义闭包:闭包是在
其词法上下文中引用了自由变量的函数。
另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体。
比如参考资源
中就有这样的的定义:
在实现深约束时,
需要创建一个能显式表示引用环境的东西,
并将它
与相关的子程序捆绑在一起,这样捆绑起来的整体被称为闭包。
这两种定义在某种意义上是对立的,一个认为闭包是函数,另一个认为闭包是函数和
引用环境组成的整体。
虽然有些咬文嚼字,
但可以肯定第二种说法更确切。
闭包只是在形式
和表现上像函数,
但实际上不是函数。
函数是一些可执行的代码,
这些代码在函数被定义后
就确定了,不会在执行时发生变化,所以一个函数只有一个实例。
闭包在运行时可以有多个实例,
不同的引用环境和相同的函数组合可以产生不同的实
例。
所谓引用环境是指在程序执行中的某个点所有处于活跃状态的约束所组成的集合。
其中
的约束是指一个变量的名字和其所代表的对象之间的联系。
那么为什么要把引用环境与函数
组合起来呢?这主要是因为在支持嵌套作用域的语言中,
有时不能简单直接地确定函数的引
用环境。