दिलचस्प पोस्ट
सीएसएस के साथ लंबी तार काट: संभव अभी तक? this.getClass ()। getClassLoader ()। getResource ("…") और NullPointerException कस्टम डेटा एनोटेशन वैलडेटर कैसे बनाएं कोणीय 2 + आयनिक 2: पता लगाएँ कि कोई वस्तु संशोधित थी या नहीं IOS 7 के लिए UIAlertView के अंदर सबव्यू कैसे जोड़ें? वीएस 2015 + बोवर: फ़ायरवॉल के पीछे काम नहीं करता java.lang.IllegalArgumentException: और नामक सर्वलेट यूआरएल-पैटर्न के लिए मैप किए जाते हैं, जिन्हें अनुमति नहीं है कैसे एक लांचर बनाने के लिए दो चयन कथन के परिणाम शामिल हों I ES6 वर्ग परिवर्तनीय विकल्प आप दो एक्सएमएल दस्तावेजों की तुलना किस प्रकार करेंगे? वास्तव में माइक्रोसॉफ्ट विज़ुअल सी ++ के दो-चरण टेम्पलेट इंस्टाशन के साथ "टूटी हुई" क्या है? क्या आप जावास्क्रिप्ट के साथ जीआईएफ एनिमेशन नियंत्रित कर सकते हैं? Android में मेरी गतिविधि से रिंगटोन कैसे सेट करें? छवि के चारों ओर प्रवाह करने के लिए लेआउट पाठ कैसे करें

ग्लोबल्स (), स्थानीय (), और वार्स () में अंतर क्या है?

globals() , locals() , और vars() में अंतर क्या है? वे क्या लौटे हैं? क्या परिणामों के अपडेट उपयोगी होते हैं?

वेब के समाधान से एकत्रित समाधान "ग्लोबल्स (), स्थानीय (), और वार्स () में अंतर क्या है?"

इनमें से प्रत्येक एक शब्दकोश लौटते हैं:

  • globals() हमेशा मॉड्यूल नेमस्पेस के शब्दकोश देता है
  • locals() हमेशा वर्तमान नामस्थान के एक शब्दकोश देता है
  • vars() या तो वर्तमान नेमस्पेस का एक शब्दकोश (अगर कोई तर्क नहीं कहा जाता है) या तर्क के शब्दकोश देता है।

locals और vars कुछ और स्पष्टीकरण का इस्तेमाल कर सकते हैं। यदि locals() एक फ़ंक्शन के अंदर कहा जाता है, तो यह उस स्थान के रूप में फ़ंक्शन नेमस्पेस का एक शब्दकोश बनाता है और इसे वापस देता है – वापस किए गए शब्दकोश में कोई अन्य नाम असाइनमेंट परिलक्षित नहीं होता है, और शब्दकोश के किसी भी असाइनमेंट वास्तविक में परिलक्षित नहीं होता है स्थानीय नामस्थान:

 def test(): a = 1 b = 2 huh = locals() c = 3 print(huh) huh['d'] = 4 print(d) 

हमें देता है:

 {'a': 1, 'b': 2} Traceback (most recent call last): File "test.py", line 30, in <module> test() File "test.py", line 26, in test print(d) NameError: global name 'd' is not defined 

दो नोट:

  1. यह व्यवहार CPython विशिष्ट है – अन्य पायथन अद्यतनों को स्थानीय नाम स्थान पर वापस लाने की अनुमति दे सकते हैं
  2. सीपीआईथॉन 2.x में इस काम को एक exec "pass" लाइन लगाकर संभव है।

अगर locals() को किसी फ़ंक्शन के बाहर कहा जाता है तो वह वास्तविक शब्दकोश देता है जो वर्तमान नाम स्थान है। नेमस्पेस में आगे के बदलाव डिक्शनरी में परिलक्षित होते हैं , और शब्दकोश में बदलाव नाम स्थान में प्रतिबिंबित होते हैं :

 class Test(object): a = 'one' b = 'two' huh = locals() c = 'three' huh['d'] = 'four' print huh 

हमें देता है:

 { 'a': 'one', 'b': 'two', 'c': 'three', 'd': 'four', 'huh': {...}, '__module__': '__main__', } 

अब तक, locals() बारे में मैंने जो कुछ भी कहा है locals() भी vars() लिए भी सत्य है … यहां पर अंतर है: vars() एक वस्तु को अपनी तर्क के रूप में स्वीकार करता है, और यदि आप इसे एक वस्तु देते हैं तो वह उस के __dict__ वस्तु। यदि वह ऑब्जेक्ट एक फ़ंक्शन नहीं था, तो __dict__ वापस आ गया है कि ऑब्जेक्ट के नेमस्पेस:

 class Test(object): a = 'one' b = 'two' def frobber(self): print self.c t = Test() huh = vars(t) huh['c'] = 'three' t.frobber() 

जो हमें देता है:

 three 

यदि ऑब्जेक्ट एक फ़ंक्शन था , तो आप अभी भी अपने __dict__ प्राप्त __dict__ , लेकिन जब तक आप मज़ेदार और रोचक सामान नहीं कर रहे हैं, शायद यह बहुत उपयोगी नहीं है:

 def test(): a = 1 b = 2 print test.c huh = vars(test) # these two lines are the same as 'test.c = 3' huh['c'] = 3 test() 

जो हमें देता है:

 3