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。
那麼這種方式可以藐視「global」關鍵字的全部意義? –
@BunnyRabbit:具有'global'關鍵字的*點*是python編譯器知道要更改的結構。充分理解爲什麼需要這樣做需要深入研究Python的內部工作('locals()'與'globals()'和字節碼等)。這裏沒有任何東西被動搖,動態語言不是試圖阻止你修改全局變量。 :-) –
對於可變對象,'global'不是必需的。 –