一、闭包
1. 什么是闭包?
在函数中可以(嵌套)定义另一个函数时,如果内部的函数引用了外部的函数的变量,则可能产生 闭包。
闭包可以用来在一个函数与一组“私有”变量之间创建关联关系。
在给定函数被多次调用的过程中,这些私有变量能够保持其持久性。
2. 形成闭包的三个条件(缺一不可)
必须有一个内嵌函数(函数里定义的函数)——这对应函数之间的嵌套
内嵌函数必须引用一个定义在闭合范围内(外部函数里)的变量——内部函数引用外部变量
外部函数必须返回内嵌函数——必须返回那个内部函数
换句话说:
其实,闭包的概念很简单:一个可以引用在函数闭合范围内变量的函数。即”内部函数”,只有那个内部函 数才有所谓的__closure__属性。
3. 闭包的原理
形成闭包之后,闭包函数会获得一个非空的__closure__属性(对比我们最后的函数test,test是一 个不具备闭包的函数,它的__closure__属性是None),这个属性是一个元组。
组里面的对象为cell对象,而访问cell对象的cell_contents属性则可以得到闭包变量的当前值 (即上一次调用之后的值)。
而随着闭包的继续调用,变
本文来源gao!%daima.com搞$代*!码$网9
量会再次更新。
所以可见,一旦形成闭包之后,python确实会将__closure__和闭包函数绑定作为储存闭包变量的场所
4. 闭包的好处
闭包不是必须的。
没了闭包,python的功能一点不会被影响
有了闭包,只是提供给你一种额外的解决方案。
二、装饰器
1. 什么是装饰器
饰器是这样一种设计模式:如果一个类(函数)希望添加其他类(函数)的一些功能,而不希望 通过继承或是直接修改源代码实现,那么可以使用装饰器模式。