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
का मान एक पायथन dict
है, और वह मान स्वयं परिवर्तनीय है।
आप बदलना क्या cache
बजाय cache = 'bar'
उपयोग करके, आप को बदलने की जाएगी क्या करने के लिए cache
अंक और फिर आप global
कीवर्ड की जरूरत को दर्शाता है की कोशिश की है।
शायद इसी तरह के प्रश्न का मेरा पुराना उत्तर आपको अंतर को समझने में मदद करता है: Python list doesn't reflect variable change।
तो इस तरह कोई 'वैश्विक' कीवर्ड रखने के पूरे बिंदु को खारिज कर सकता है? –
@ बनी खरगोश: 'ग्लोबल' कीवर्ड रखने का * बिंदु * पाइथन कंपाइलर के लिए है कि यह जानने के लिए कि कौन सी संरचना बदलनी है। पूरी तरह समझते हैं कि इसकी आवश्यकता क्यों है पाइथन ('स्थानीय()' बनाम 'ग्लोबल्स()' और बाइट कोड और ऐसे) के आंतरिक कार्यकलापों में डेलिंग की आवश्यकता है। यहां कुछ भी निंदा नहीं किया जा रहा है, एक गतिशील भाषा आपको ग्लोबल्स को संशोधित करने से रोकने की कोशिश करने के बारे में नहीं है। :-) –
म्यूटेबल ऑब्जेक्ट्स के लिए 'ग्लोबल' की आवश्यकता नहीं है। –