无法理解如何在嵌套闭包中计算自由变量值



我创建了一个nested closure,如下所示:

def incrementer(n):
def inner(start):
current = start
def inc():
nonlocal current
current += n
return current
return inc
return inner
fn = incrementer(2)

现在,当我为fn打印co_freevars的值时,我得到以下输出:

print(fn.__code__.co_freevars) -> ('n',)

我的理解是应该是(),因为inner里面直接有no free variables

为什么print(fn.__code__.co_freevars)不打印()

想想def inc实际在做什么:它创建了一个闭包对象,该对象填充了对currentn的引用(单元格(。为了(为inner创建的闭包(能够做到这一点,它必须具有对n本身的引用。

最新更新