cache = {}
def func():
cache['foo'] = 'bar'
print cache['foo']
çıkışBu durumda global anahtar kelime neden gerekli değil?
bar
Neden bu çalışma ve neden global
anahtar kelimenin kullanılmasını gerektirmez geliyor?
cache = {}
def func():
cache['foo'] = 'bar'
print cache['foo']
çıkışBu durumda global anahtar kelime neden gerekli değil?
bar
Neden bu çalışma ve neden global
anahtar kelimenin kullanılmasını gerektirmez geliyor?
değerini atamadığınız için , bunun yerine sözlüğün kendisini değiştiriyorsunuz. cache
hala sözlüğe işaret ediyor, dolayısıyla değişmemiş. cache['foo'] = 'bar'
hattı, cache.__setitem__('foo', 'bar')
'a çevrilir. Diğer bir deyişle, cache
'un değeri bir python dict
'dur ve bu değerin kendisi mutable olabilir.
cache
yerine cache = 'bar'
kullanarak, cache
işaret ve sonra global
anahtar kelime ne gerek değişen olacağını belirtmektedir neyi değiştirmeyi denediğinizde. Belki de bu eski soruyu benzer bir soruya verdiğiniz cevap, şu anki farkı anlamanıza yardımcı olur: Python list doesn't reflect variable change. Değiştirilebilir nesneler için
Bu sayede, global 'global' anahtar sözcüğe sahip olmanın bütün noktasına meydan okuyabilirsiniz? –
@BunnyRabbit: 'global' anahtar kelimesine sahip olmanın * noktası *, python derleyicisinin hangi yapının değişeceğini bilmesi içindir. Niçin gerekli olduğunu tam olarak anlamak, Python'un ('locals()') 'globals()' ve byte kodu ve benzeri) iç işleyişlerini incelemeyi gerektirir. Burada hiçbir şeye meydan okunmuyor, dinamik bir dil, sizi globals'ı değiştirmekten alıkoymaya çalışmak değildir. :-) –
'global' gerekli değildir. –