Python闭包
闭包
# 封闭的东西 : 保证数据的安全
l1 = []
li = [] # 这时候如果我添加一个全局变量li = [],
def make_averager(new_value):
l1.append(new_value)
total = sum(l1)
averager = total/len(l1)
return averager
print(make_averager(100000))
print(make_averager(110000))
l1.append(666) # 这里其实我想改变的li,却操作错了l1 这意味着l1在全局中并不安全
print(make_averager(120000))
print(make_averager(90000))
# 方案二: l1放进方法中 数据安全, 但是l1不是全局变量
# 每次执行的时候, l1列表都会重新赋值成[]空列表
def make_averager(new_value):
l1 = []
l1.append(new_value)
total = sum(l1)
averager = total/len(l1)
return averager
print(make_averager(100000))
print(make_averager(110000))
l1.append(666) # 这里其实我想改变的li,却操作错了l1 这意味着l1在全局中并不安全
print(make_averager(120000))
print(make_averager(90000))
# 方案三:
def make_averager():
l1 = []
def averager(new_value):
l1.append(new_value)
total = sum(l1)
return total/len(l1)
return averager
avg = make_averager() # 调用函数make_averager() 赋值给avg
print(avg(100000)) # 调用avg加(参数) 调用内置函数 每次生成一个l1都返回并保存,原来的l1删除


只要闭包中使用到了自由变量, 那么这个自由变量就会一直存在
# 闭包:
# 1.闭包只能存在嵌套的函数中
# 2.内层函数对外层函数非全局变量的引用(使用)
# 特点: 被引用的非全局变量也称作自由变量, 这个自由变量会与内存函数产生一个绑定关系,自由变量不会在内存中消失.
# 作用: 保证数据安全
判断代码的闭包:
avg = make_averager()
print(avg.__code__.co_freevars)
(venv) C:\work\python>python 04bibao.py
('l1',) # 获取了一个元组
posted on 2020-06-10 22:06 sunnywillow 阅读(70) 评论(0) 收藏 举报
浙公网安备 33010602011771号