20
cache = {}
def func():
    cache['foo'] = 'bar'
print cache['foo'] 

出力

bar

なぜこれが機能し、globalキーワードを使用する必要がないのですか?

4

1 に答える 1

21

に割り当てていないためcache、代わりに辞書自体を変更しています。cacheはまだ辞書を指しているため、それ自体は変更されていません。この行cache['foo'] = 'bar'は に変換されcache.__setitem__('foo', 'bar')ます。つまり、 の値cacheは pythondictであり、その値自体は変更可能です。

代わりにcache使用して何を参照するかを変更しようとすると、何を指すかを変更することになり、キーワードが必要になります。cache = 'bar'cacheglobal

おそらく、同様の質問に対するこの古い回答は、違いを理解するのに役立ちます: Python list does not Reflect variable change

于 2012-12-29T11:46:17.317 に答える