闭包
在python中,闭包是理解修饰器
的基础。
构成闭包的条件:
- 需要嵌套
内部函数
- 内部函数使用
外部函数的参数
- 返回值为
内部函数名
示例
def func():
a = 10
def inner_func():
print('a的值为',a)
return inner_func
x = func()
x()
代码解读:
func函数返回的是inner_func的地址,所以返回值x等价于inner_func,调用函数需要加括号。
闭包的特点:保存参数状态
示例
# 复杂的闭包(含参数)
def func(b,c):
a = 10
def inner_func():
print('a+b+c的值为',a+b+c)
return inner_func
x1 = func(1,2)
x2 = func(3,4)
x1()
x2()
输出结果:
a+b+c的值为 13
a+b+c的值为 17
代码解读:第二次调用并没有改变第一次调用中b和c的值。
闭包的缺点
- 作用域郿那么直观
- 因为变量不会被垃圾回收,所以有一定的内存占用问题。