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。