闭包:在嵌套函数内,使用非全局变量且不是本层
def func():
a = 1
def f1():
def foo():
print(a)
return foo
return f1
ret = func()
a = ret()
a()
简写:
func()()()
def func():
avg_lst = [] # 自由变量
def foo(price):
avg_lst.append(price)
avg = sum(avg_lst) / len(avg_lst)
return avg
return foo
ret = func()
print(ret(150000))
print(ret(160000))
print(ret(170000))
print(ret(180000))
验证是否是闭包 closure():
print(ret.__closure__)
print(func.__closure__)
获取自由变量 code.co_freevars:
print(ret.__code__.co_freevars)
获取局部变量 code.co_varnames:
print(ret.__code__.co_varnames)
闭包的作用:
1、保证数据的安全性(干净)
2、装饰器