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

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

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

阅读 1.3k
评论
    8 个回答

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

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

        • 3.2k

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


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

          • 273

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

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

            • 12k
              • 3.3k

              词法作用域。。。

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

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

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

                  • 160

                  高阶函数

                    撰写回答

                    登录后参与交流、获取后续更新提醒

                    相似问题
                    推荐文章