闭包需要符合的条件:
1,外部函数中定义了内部函数
2,外部函数是有返回值的
3,返回的值是:内部函数名
4,内部函数引起了外部函数的变量
即在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包
def func():
a = 100
def inner_func():
b = 99
print(a,b)
print(locals())
return inner_func
格式如下:
def 外部函数():
def 内部函数():
return 内部函数
闭包的缺点:
1,作用域不直观
2,变量不会被垃圾回收所以会有一定的内存占用问题
闭包的作用:
1,可以使用同级的作用域
2,读取其他元素的内部变量
3,延长作用域
闭包总结:
1,闭包优化了变量,原来需要类对象完成的工作,闭包也可以完成
2,由于闭包引用了外部函数的局部变量,则外部函数的局部变量没有及时释放,消耗内存
3,闭包的好处,使代码变得简洁,便于阅读
4,理解装饰器的基础
def func():
a = 100
def inner_func1():
b = 90
s = a + b
print(s)
def inner_func2():
inner_func1()
print('-------inner_func2', a)
return 'hello'
return inner_func2()
f = func()
print(f)
ff = f()
print(ff)