函数闭包
闭包作用,保证数据安全
内层函数对外层函数非全局变量的引用就会形成闭包
被引用的非全局变量也称自由变量,这个自由变量会与内层函数产生一个绑定关系
自由变量不会在内存中消失
实例代码
li = [] #该列表是全局变量:可以在文件当中任何位置和函数中修改里面的值,数据不安全
def average(value):
li.append(value)
return sum(li) / len(li)
print(average(6000))
print(average(7000))
print(average(8000))
#output 6000
#output 6500
#output 7000
#将列表放在函数里面,在其他函数中或者文件其他位置不能对列表进行修改
#单纯将列表放进函数中,当函数执行完后列表(局部变量)被释放,数据也就没有了
#通过使用闭包进行数据保存
def average():
li = [] # 自由变量
def inner(value): # 内存函数
li.append(value)
return sum(li) / len(li)
return inner
#调用函数时带括号(参数或者无参数),表示调用的是函数的执行结果,必须等该函数执行完成的结果
#不带括号时,调用的是这个函数本身,是整个函数体,是一个函数对象,不须等函数执行完成
#理解:带括号表示初始化该函数,不带括号表示将该函数传递给其他变量
avg = average()
print(avg(6000))
print(avg(7000))
print(avg(8000))
#output 6000
#output 6500
#output 7000
素材来源
[1]: https://www.bilibili.com/video/BV1it4y127co