2. 在外部函数内部定义一个内部函数,这个内部函数可以访问外部函数的局部变量。
3. 外部函数返回内部函数,这样外部函数的局部变量就被内部函数所引用,形成闭包。
下面是一个简单的闭包示例:
def outer_function(x):
def inner_function(y):
return x + y
return inner_function
closure = outer_function(10) 创建一个闭包,其中x的值为10
result1 = closure(5) 调用闭包,传入参数y=5,返回10+5=15
print(result1) 输出:15
closure.x = 20 修改闭包中引用的外部变量x的值
result2 = closure(5) 再次调用闭包,传入参数y=5,返回20+5=25
print(result2) 输出:25
在这个例子中,`outer_function` 是一个外部函数,它接受一个参数 `x` 并返回一个内部函数 `inner_function`。`inner_function` 可以访问 `outer_function` 的局部变量 `x`。当我们调用 `outer_function(10)` 时,它返回 `inner_function`,并将其赋值给 `closure`。之后,我们可以调用 `closure(5)`,它会使用保存的 `x` 的值(在这个例子中是10)加上传入的参数 `y`(在这个例子中是5),返回结果15。之后,我们修改了闭包中引用的 `x` 的值,并再次调用闭包,得到了不同的结果25。
需要注意的是,闭包可以记住并访问其创建时所在环境中的变量,即使外部函数已经执行完毕。这使得闭包在编程中有许多用途,比如实现装饰器、维护状态等