Python 全局变量以及需要声明它们的时间
在以下代码中:Python 全局变量以及需要声明它们的时间,python,scope,global,Python,Scope,Global,在以下代码中: >>> import time >>> cache = {} >>> >>> def squared(num): ... if num in cache: return cache[num] ... print ("Calculating...") ... time.sleep(1) # fake a calculation ... result = num * num ..
>>> 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}
为什么我可以在函数中修改
缓存
,而不必在函数中调用全局
?global
是否与变量是否可变或不可变直接相关,或者在上述情况下它为什么工作?您的函数会看到外部缓存变量。
因为它是可变的,所以它可以对它进行变异,并且可以在函数内部和外部看到它
如果要为名称指定新值,并且希望外部名称也绑定到此值,则需要使用全局。
例如,如果要将3指定给名称“cache”,请使用cache=3。如果不将其声明为全局变量,则它将是函数内部的一个简单局部变量,外部缓存名称仍将绑定到其原始值。这里有一个提示:如果将
cache[num]=result
替换为cache={num:result}
,你会得到一个.global与mutabilityok无关,所以基本上如果对象是不可变的,你需要使用global
关键字在全局范围内更改它,对吗?如果它是可变的,你可以在任何地方更改它,而不用担心它。@Kyle不,你永远不能更改不可变的对象。这是不变的means@kyle,我认为你是在耦合两个独立的问题。可变/不可变和名称范围。前者讨论更改对象(值)的能力,后者讨论在什么范围内更改某个变量名(而不是值)的绑定。