Python存储函数闭包的名称绑定在哪里?

时间:2015-08-26 08:02:43

标签: python closures python-2.x cpython

所以最近我理解了函数闭包的概念。

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

0 个答案:

没有答案