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は pythondictであり、その値自体は変更可能です。
代わりにcache使用して何を参照するかを変更しようとすると、何を指すかを変更することになり、キーワードが必要になります。cache = 'bar'cacheglobal
おそらく、同様の質問に対するこの古い回答は、違いを理解するのに役立ちます: Python list does not Reflect variable change。