无法理解如何在嵌套闭包中评估自由变量值?
Unable to understand how free variable value is evaluated within nested closure?
我创建了一个 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
实际上在做什么:它正在创建一个 闭包 对象,其中填充了对 current
的引用(单元格)和 n
。为了(为 inner
创建的闭包)能够做到这一点,它必须引用 n
本身。
我创建了一个 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
实际上在做什么:它正在创建一个 闭包 对象,其中填充了对 current
的引用(单元格)和 n
。为了(为 inner
创建的闭包)能够做到这一点,它必须引用 n
本身。