如何用一句精炼的话来表述 Python 的闭包?

藕丝空间
  • 1.7k

个人理解,闭包就是函数嵌套以及由此产生的作用域问题

不妥之处,还请高手指正。

回复
阅读 1.7k
8 个回答
✓ 已被采纳

函数是一个馒头,闭包是一个有馅(自由变量)的包子。函数一眼看穿,包子不咬下去不知道什么味。

松本行弘对闭包的解释​​​:闭包和对象都是“数据与过程的结合”,对象是在数据中以方法的形式内含了过程,闭包则是在过程中以环境的形式内含了数据。

名字空间与函数捆绑后的结果被称为一个闭包(closure)


一般变量的搜索顺序是 LGB , 而在闭包中是 LEGB 这个 E 就是被函数捆绑在一起的名字空间.

定义中含有自由变量的函数叫闭包。运行时自由变量通过作用域链进行查找。根据语言作用域机制的不同(词法/静态作用域或动态作用域),自由变量会绑定到定义时环境(词法作用域)或者运行时环境(动态作用域)。大部分语言都是词法作用域,例如Python、JavaScript

可以看看这个
词法作用域和动态作用域

词法作用域。。。

闭包是在Js流行后才真正流行起来的。它很可能造成内存泄露,理解起来也很费劲。它在JS中的一个作用是局部变量驻留内存,即原来一个局部变量会随着函数的退出被系统清除,而使用了闭包就会让这个变量驻留在内存中。
通常当内部函数访问外部函数的变量时,就形成了闭包,也即词法作用域的问题。比如有:

function warp(){
    var a=10;
    return function(){
        a=a+1;
    }
}

在上面这个例子中,变量a就常驻内存,但和全局变量又有不同,它只能在warp的作用域中访问。

你知道吗?

宣传栏