我正在读这个关于装饰器的article。嵌套函数中的python变量作用域
在步骤8,有一个定义为一个函数:
def outer():
x = 1
def inner():
print x # 1
return inner
,如果我们通过运行:
>>> foo = outer()
>>> foo.func_closure # doctest: +ELLIPSIS
它不打印X。根据解释:
一切工作根据Python的范围规则 - x是我们的函数外部的本地 变量。当内部打印x在点#1时Python 寻找一个局部变量到内部,并且找不到它在外围函数 中寻找它,在那里找到它。
但是从变寿命的角度来看呢?我们的 变量x对于外部函数是本地的,这意味着只有当外部函数运行时才存在 。根据我们的Python 如何工作的模型,我们无法调用内部函数,直到 之后,在我们调用inner的时候x应该不再存在,也许 会发生某种运行时错误。
不过,我真的不明白第二段的意思。
我明白inner()确实获得了x的值,但为什么它不打印x呢?
感谢
UPDATE:
感谢所有的答案。现在我明白了原因。 的“返回内”只是一个指针到内(),但它并没有得到执行,这就是为什么内()不X作为它完全不
OP也在问为什么'x'仍然存在 – jamylak
@jamylak:我不清楚他是否是。他说他不明白引用的段落,但也表示他明白“内部”是如何访问'x'的。 – BrenBarn
以任何方式您现在已经清除了 – jamylak