我正在阅读这篇关于装饰器的文章。
在第 8 步,有一个函数定义为:
def outer():
x = 1
def inner():
print x # 1
return inner
如果我们通过以下方式运行它:
>>> foo = outer()
>>> foo.func_closure # doctest: +ELLIPSIS
它不打印 x。根据解释:
一切都根据 Python 的作用域规则进行 - x 是我们函数外部的局部变量。当inner 在点#1 打印x 时,Python 寻找inner 的局部变量,但没有找到它,它在封闭范围内查找,即函数outer,在那里找到它。
但是从变量生命周期的角度来看呢?我们的变量 x 是函数 external 的局部变量,这意味着它仅在函数 external 运行时存在。在外部返回之前,我们无法调用内部,因此根据我们的 Python 工作模型,在我们调用内部时 x 应该不再存在,并且可能会发生某种运行时错误。
但是,我真的不明白第二段是什么意思。
我知道 inner() 确实得到了 x 的值,但为什么它不打印 x 呢?
谢谢
更新:
谢谢大家的回答。现在我明白了原因。“ return inner ”只是一个指向inner() 但它没有被执行的指针,这就是为什么 inner() 不打印 x 因为它根本没有被调用