闭包


  • 闭包: 如果在一个内部函数里,对在外部作用域(但不是全局作用域)的变量进行引用,那么内部函数就被认为是闭包

  • 自由变量; 定义在外部函数内但由内部函数引用或使用的变量称为自由变量

  • 一个简单的例子:

    • counter() 做的唯一一件事就是接受一个初始化的值开始计数,并将该值赋值给列表 count 唯一一个成员。然后定义一个 inner() 的内部函数。
    • 通过在内部使用变量 count,我们创建了一个闭包,因为他现在懈怠了整个 counter() 作用域。inner() 增加了了正在运行的 count 然后返回它
    • 如果调用多次 a() 函数,输出结果如下
def counter(start_at=0):
    count = [start_at]
	
    def inner():
        count[0] += 1
    	return count[0]

    return count

a = counter(10)
print(a())
print(a())
print(a())

# ---------输出结果----------
# 11
# 12
# 13