面试题答案
一键面试def power_of(n):
def inner(x):
return x ** n
return inner
# 测试
square = power_of(2)
print(square(5)) # 输出25
闭包函数中变量的作用域情况解释
- 外部函数的参数和局部变量:在
power_of
函数中,n
是外部函数的参数。这个变量在外部函数定义时被创建,并在外部函数返回内部函数inner
后,依然可以被inner
函数访问和使用。它的作用域虽然从power_of
函数定义开始,但由于闭包的特性,在外部函数执行结束后,这个变量不会被销毁,而是被内部函数inner
所引用并保留在内存中。 - 内部函数的参数和局部变量:在
inner
函数中,x
是内部函数的参数。x
的作用域仅在inner
函数内部,当inner
函数执行完毕,x
相关的栈帧会被销毁,除非有其他地方对其有额外引用。而inner
函数通过闭包,能够访问到外部函数power_of
中的n
变量,即使外部函数power_of
已经返回。这是闭包的关键特性,即内部函数可以记住并访问其所在的外部函数作用域中的变量,尽管外部函数的生命周期已经结束。