cache = {}
def func():
cache['foo'] = 'bar'
print cache['foo']
输出
bar
为什么这有效,为什么不需要使用global
关键字?
cache = {}
def func():
cache['foo'] = 'bar'
print cache['foo']
输出
bar
为什么这有效,为什么不需要使用global
关键字?
因为您没有分配给cache
,所以您正在更改字典本身。cache
仍然指向字典,因此本身没有改变。该行cache['foo'] = 'bar'
转换为cache.__setitem__('foo', 'bar')
。换句话说, 的值cache
是一个 python dict
,并且该值本身是可变的。
如果您尝试cache
通过使用cache = 'bar'
来更改所指的内容,那么您将更改cache
指向的内容,然后您需要global
关键字。
也许我对类似问题的这个较早的答案可以帮助您理解差异:Python list doesn't reflect variable change。