闭包可以通过将状态信息作为自由变量捕获来“知道”需要保留状态信息。当闭包创建时,它会捕获其外部作用域中的变量,并将其保存在闭包内部。这样,无论闭包在何处被调用,它都可以访问和修改这些状态信息。
以下是一个示例代码,演示了闭包如何保留状态信息:
def outer_function():
count = 0
def inner_function():
nonlocal count
count += 1
print(count)
return inner_function
# 创建闭包
closure = outer_function()
# 调用闭包多次,每次调用都会保留之前的状态信息
closure() # 输出 1
closure() # 输出 2
closure() # 输出 3
在上面的示例中,outer_function
是一个外部函数,它包含一个内部函数 inner_function
。inner_function
通过 nonlocal
关键字将 count
变量声明为非局部变量,从而使闭包能够修改外部函数的变量。每次调用闭包 closure
,count
的值都会递增,并打印出当前的值。
这样,闭包在每次调用时都能“知道”之前的状态信息,并且能够保留和修改这些信息。