为什么 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
在 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