定义
闭包指延伸了作用域的函数,其中包含函数定义体中引用、但是不在定义体中定义 的非全局变量。函数是不是匿名的没有关系,关键是它能访问定义体之外定义的非全局变 量。
实践
def make_averager():
series = [] # series 相对averager函数而言是全局变量
def averager(new_value):
series.append(new_value) #此处访问了全局变量series
total = sum(series)
return total/len(series)
return averager
avg = make_averager()
使用make_average 函数返回的是averager函数
当这个过程发生后,理论上讲make_averager的任务就完成了,serier变量是应该消失的,此时,如果使用avg会出现报错
但是
>>> avg(10)
10.0
>>> avg(11)
10.5
>>> avg(12)
11.0
说明series的变量依然存在
总结
闭包是一种函数,它会保留定义函数时存在的自由变量的绑定,这样调用函数时, 虽然定义作用域不可用了,但是仍能使用那些绑定。