代码示例:
def outer_function(x):def inner_function(y):return x + yreturn inner_functionclosure_example = outer_function(5)
result = closure_example(3) # 输出为 8
在这个示例中,outer_function
是一个包含内部函数的闭包。让我们逐步分析它的工作原理:
- 定义外部函数:
outer_function(x)
接收一个参数x
。 - 定义内部函数:
inner_function(y)
接收一个参数y
,并返回x + y
。由于inner_function
是在outer_function
内部定义的,它可以访问outer_function
的局部变量x
。 - 返回内部函数:
outer_function
返回inner_function
的引用,而不是调用它。这意味着closure_example
现在指向inner_function
。
当执行以下代码时:
closure_example = outer_function(5)
outer_function
被调用,传入参数x = 5
。outer_function
返回inner_function
的引用,且x = 5
的值在这个闭包中被“捕获”。
然后,当调用:
result = closure_example(3)
- 实际上是调用
inner_function(3)
。 - 在
inner_function
中,y = 3
,并且它可以访问闭包中捕获的x = 5
。 - 因此,
inner_function
返回x + y
,也就是5 + 3 = 8
。
所以,函数返回结果是 8 是因为 closure_example
实际上是 inner_function
,它在计算 x + y
时用的是捕获的 x = 5
和传入的 y = 3
。