为什么 python 不删除超出范围的函数变量?

Why doesn't python delete a function's variables when it it out of scope?

在 python 中,我知道函数 运行 在调用它们的上下文中,而不是在它们定义的上下文中。但是,在下面的代码中,函数是从另一个函数返回,它仍然可以访问定义它的函数的变量(特别是列表'cache'),即使该函数现在超出范围(我认为),所以我会它的变量将被删除。但它也可以从当前上下文访问全局变量?

def wrapper(func):
    cache = []
    def func_new(n):
        cache.append(func(n))
        print(cache)
        
    return func_new
            
def add1(n):
    return(n+1)
    
x = wrapper(add1)
x(5)
x(2)
print(cache)

不是吗?

>>> x = wrapper(add1)
>>> x(5)
[6]
>>> x(2)
[6, 3]
>>> print(cache)
Traceback (most recent call last):
  File "<pyshell#7>", line 1, in <module>
    print(cache)
NameError: name 'cache' is not defined

至于在包装器中定义的缓存变量,它与其他地方的行为相匹配;该函数可以访问定义它的所有变量。反之则不然。函数中定义的变量在上下文范围内不可访问,除非明确为全局变量。

这个例子有帮助吗?

>>> x = 4
>>> def test():
    print(x)

    
>>> test()
4