在以下代码中:
>>> import time
>>> cache = {}
>>>
>>> def squared(num):
... if num in cache: return cache[num]
... print ("Calculating...")
... time.sleep(1) # fake a calculation
... result = num * num
... cache[num] = result
... return result
...
>>> squared(2)
Calculating...
4
>>> squared(2)
4
>>> cache
{2: 4}
为什么我可以在函数中修改cache
而不必在函数中调用global
? global
与变量是否可变/不可变直接相关,或者在上述情况下为何起作用?
您的函数会看到外部缓存变量。因为它是可变的,所以可以对其进行突变,并且可以在函数内部以及函数外部看到它。
如果要为名称分配新值,并且还希望将外部名称绑定到该值,则需要使用global。例如,如果要将3分配给名称“ cache”,则使用cache = 3。如果您不将其声明为全局变量,则它将是函数内部的一个简单局部变量,并且外部缓存名称仍将绑定为其原始值。