所以最近我理解了函数闭包的概念。
Use local gradle distribution
根据我的理解,函数闭包的目的是保持对对象的活动引用,以避免垃圾收集此对象。这就是为什么以下工作正常:
def outer():
somevar = []
assert "somevar" in locals() and not "somevar" in globals()
def inner():
assert "somevar" in locals() and not "somevar" in globals()
somevar.append(5)
return somevar
return inner
function = outer()
somevar_returned = function()
assert id(somevar_returned) == id(function.func_closure[0].cell_contents)
在执行del outer
somevar_returned_2 = function()
assert id(somevar_returned) == id(function.func_closure[0].cell_contents)
assert id(somevar_returned) == id(somevar_returned_2)
函数之前,事情是(总是和我理解的一样),Python重建了locals变量字典。这本词典将包含:
问题是Python存储闭包的名称绑定在哪里?我无法在任何地方找到它。
注意:函数的属性:
inner