闭包
使用场景:默认的,函数调用完成会后,销毁函数内部定义的变量,但有时候需要保存函数内的变量,再该变量的基础上进行操作
定义:在函数嵌套的前提下,内部函数使用了外部函数的变量,并且外部函数返回了内部函数的引用,把这个使用外部函数变量的内部函数称为闭包。
(内函数的引用+外部函数的环境)
使用闭包时,外部函数的变量没有及时释放,会消耗内存。
闭包的构成条件:
- 函数嵌套
- 内部函数使用了外部函数的变量(参数等)
- 外部函数返回内部函数的引用 (引用!不是调用!)、
def outer():
a = 10
def inner():
b = a + 1
print(b)
return inner
res = outer()
print(res)
print(id(res))
print(type(res))
res()
<function outer.<locals>.inner at 0x000001BFF385F158>
1923936022872
<class 'function'>
11
闭包的使用
通过对象实现对话
class Person(ob