【发布时间】:2019-10-20 00:08:14
【问题描述】:
在以下代码中:
>>> 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 是否与变量是否可变/不可变直接相关,或者为什么它在上述情况下起作用?
【问题讨论】:
-
这里有一个提示:如果你用
cache = {num: result}替换cache[num] = result,你会得到一个UnboundLocalError。 -
global 与可变性无关