【发布时间】:2018-06-23 04:54:37
【问题描述】:
考虑以下示例:
def g():
in_g=100
def f1():
nonlocal in_g
in_g = 10
def f2():
nonlocal in_g
print(in_g)
return (f1,f2)
(f1, f2) = g()
f2() #prints 100
f1()
f2() #prints 10
内部函数f1 和f2 在它们的“闭包”中都可以访问变量in_g。
但是g返回后,in_g在内存中保存在哪里?
我假设当g 正在执行时,in_g 是堆栈帧上的一个变量,对应于对g 的调用。因此,g、f1 和f2 在使用变量in_g 时都访问相同的内存位置(在堆栈上)。
但是,如示例中所示,在 g 返回后,f1 和 f2 在引用 in_g 时仍然访问相同的内存位置。但是,既然g 返回了,那个内存位置就不能再在堆栈上了。
【问题讨论】:
标签: python closures python-nonlocal