用案例解释闭包:整个历史中的某个商品的平均收盘价。什么叫平局收盘价呢?就是从这个商品一出现开始,每天记录当天价格,然后计算他的平均值:平均值要考虑直至目前为止所有的价格。
比如大众推出了一款新车:小白轿车。
第一天价格为:100000元,平均收盘价:100000元
第二天价格为:110000元,平均收盘价:(100000 + 110000)/2 元
第三天价格为:120000元,平均收盘价:(100000 + 110000 + 120000)/3 元
…………
l1 = [] # 全局变量,数据不安全,容易被误操作改变。
li = [] # 相似的变量
def make_averager(new_value):
l1.append(new_value)
total = sum(l1)
return total / len(l1)
print(make_averager(100000)) # 100000.0
print(make_averager(110000)) # 105000.0
l1.append(34556) # 本来要对li进行操作,但是不小心追加错了,造成最终结果出错。
print(make_averager(120000)) # 83364.0
def make_averager():
l1 = [] # 将l1放置在函数内,变成了局部变量,
def averager(new_value): # l1在这里被嵌套函数averager调用了,
l1.append(new_value) # 列表l1和函数averager之间产生了一个绑定关系,
return sum(l1) / len(l1)
print(locals())
return averager
avg = make_averager() # 接下来嵌套函数averager被赋值给了avg变量,
print(avg(100000)) # 所以l1虽然在全局变量列表中已经消失,不可调用,但却真实存在,
l1.append(54464) # 这行代码调用将出错
print(avg(110000)) # 只有通过avg变量调用才能对l1进行改变,
print(avg(90000)) # 这个现象就是闭包。
print(globals())
Original: https://www.cnblogs.com/amwkvi/p/13747874.html
Author: amwkvi
Title: Python 闭包的相关知识
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/643505/
转载文章受原作者版权保护。转载请注明原作者出处!