1.啰嗦一下
学这个知识点的时候,我本来想先了解下定义, 知道个大概再说, 翻了几篇博客,基本上都是有例子带着进入理解这块。即使读了定义,思想还是不能显出个框架。 想吃快餐,有些行,有些就不可以(这里仅代表我自己)。
有个词叫格物致知,《现代汉语词典》2012年发行的第六版将“格物致知”解释为:“推究事物的原理,从而获得知识。”
以后学习着急的时候就用这个词 “格物致知” 来先放慢脚步。
2.定义
字面的定义:闭包是由函数及其相关的引用环境组合而成的实体(即:闭包=函数+引用环境)
3.举个栗子,再解释一下
看例子
函数可以作为另一个函数的参数或返回值,可以赋给一个变量。函数可 以嵌套定义,即在一个函数内部可以定义另一个函数,有了嵌套函数这种结构,便会产生闭包问题。
内嵌函数inF(),引用了外层函数的变量sum,
当我们用不同参数调用outF()是,得到的结果是隔离的
也就是说每次调用outF()函数后都将生成并保存一个新的局部变量sum。其实这里outF()函数返回的就是闭包。
在函数式语言中,当内嵌函数体内引用到体外的变量时,将会把定义时涉及到的引用环境和函数体打包成一个整体(闭包)返回。
现在给出引用环境的定义就 容易理解了:引用环境是指在程序执行中的某个点所有处于活跃状态的约束(一个变量的名字和其所代表的对象之间的联系)所组成的集合。闭包的使用和正常的函 数调用没有区别。
4.再举个栗子,内嵌函数带参数
这里c返回的就是内嵌函数addy()
c(10)也就是指addy(10),
5.闭包的用途
用途1,当闭包执行完后,仍然能够保持住当前的运行环境。
用途2,闭包可以根据外部作用域的局部变量来得到不同的结果,这有点像一种类似配置功能的作用,我们可以修改外部的变量,闭包根据这个变量展现出不同的功能。
6.总结如何创建一个闭包
在Python中创建一个闭包可以归结为以下三点:
函数内嵌函数;
内嵌函数需要引用上一级namespace中的变量;
外围函数必须返回内嵌函数;
通过这三点,就可以创建一个闭包,Python装饰器就是使用了闭包。
参考:
https://www.cnblogs.com/JohnABC/p/4076855.html
https://www.jianshu.com/p/1de5db830a44?utm_campaign