有一些代码:
def aaa():
t = "text"
def bbb():
print(t)
return bbb
v = aaa()
v()
在 aaa 函数的主体中,创建并返回了 bbb 函数。看不懂2点: 1.为什么V()调用不报错,因为函数对象应该在退出body后销毁。2. 为什么变量 t = "text" 没有被销毁?原因是一样的
有一些代码:
def aaa():
t = "text"
def bbb():
print(t)
return bbb
v = aaa()
v()
在 aaa 函数的主体中,创建并返回了 bbb 函数。看不懂2点: 1.为什么V()调用不报错,因为函数对象应该在退出body后销毁。2. 为什么变量 t = "text" 没有被销毁?原因是一样的
一个对象只有在任何人不再需要它时才会被销毁,并且
CPython
当对该对象的引用数变为等于 0 时就会发生这种情况。v
在这个例子中,一个闭包可以访问它的名字(在这个例子中没有)、函数内部的名字(aaa
即t
、bbb
函数已声明,(即aaa
,v
)闭包是一个函数,它捕获了其父函数的变量,或者层次结构中更高的函数,并且即使该函数已经退出,也能够使用它们。
例子:
一切都是一样的,但在匿名“lambda”函数的帮助下