全局变量以及何时需要声明它们

问题描述 投票:0回答:1

在以下代码中:

>>> 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而不必在函数中调用globalglobal与变量是否可变/不可变直接相关,或者在上述情况下为何起作用?

python scope global
1个回答
1
投票

您的函数会看到外部缓存变量。因为它是可变的,所以可以对其进行突变,并且可以在函数内部以及函数外部看到它。

如果要为名称分配新值,并且还希望将外部名称绑定到该值,则需要使用global。例如,如果要将3分配给名称“ cache”,则使用cache = 3。如果您不将其声明为全局变量,则它将是函数内部的一个简单局部变量,并且外部缓存名称仍将绑定为其原始值。

© www.soinside.com 2019 - 2024. All rights reserved.