def outerfunc(x):
def innerfunc():
print(x)
return innerfunc
myfunc = outerfunc(7)
myfunc()
del outerfunc
myfunc()
我正在经历闭包,并遇到了这个问题,我预计输出是一个错误。我认为这里的局部变量
x
在执行innerfunc
之后的del outerfunc
期间不再存在。
正确的输出是:
7
7
我们可以一步步跟踪您的代码库
outerfunc(7)
被调用。这里,x
是 7。innerfunc
被返回并赋值给myfunc
。myfunc()
,本质上是innerfunc()
。它打印 x
的值,即 7。outerfunc
。但是,这对 innerfunc
或 innerfunc
封闭的变量没有影响(在本例中为 x
)。myfunc()
,它仍然打印7。因此,当您创建闭包时,封闭的函数会维护对其周围状态的引用。在这种情况下,
x
的值保持在innerfunc
之内,outerfunc
被删除也没有关系。
这是闭包的一个非常强大的特性,广泛应用于各种编程场景,尤其是Python中的装饰器和回调函数中。