में वैश्विक चरणीय खोज को अक्षम करें संक्षेप में, प्रश्न: क्या पाइथन को मौजूदा दायरे के बाहर चर को देखने से रोकने का कोई तरीका है?पाइथन
विवरण:
अजगर बाहरी कार्यक्षेत्रों में चर परिभाषा के लिए लग रहा है कि अगर वे वर्तमान क्षेत्र में परिभाषित नहीं कर रहे हैं। इस प्रकार, इस तरह कोड जब सावधान नहीं किया जा रहा तोड़ने के लिए पुनर्रचना के दौरान उत्तरदायी होगा:
def line(x, a, b):
return a + x * b
a, b = 1, 1
y1 = line(1, a, b)
y2 = line(1, 2, 3)
अगर मैं समारोह तर्क का नाम बदला है, लेकिन उन्हें समारोह शरीर के अंदर का नाम बदलने की भूल गया, कोड अभी भी चल पाएंगे:
def line(x, a0, b0):
return a + x * b # not an error
a, b = 1, 1
y1 = line(1, a, b) # correct result by coincidence
y2 = line(1, 2, 3) # wrong result
मुझे पता है it is bad practice to shadow names from बाहरी क्षेत्रों। हालांकि, वहाँ क्यों इस वैसे भी किया जाता है कुछ कारण हैं:
-
कभी कभी
- अर्थपूर्ण हो सकता है एक ही नाम है, क्योंकि वे एक ही बात
- एक सार्थक चर नाम से बाहर चला सकता है का उल्लेख
- आलस्य
क्या पाइथन को मौजूदा दायरे के बाहर चर को देखने से रोकने का कोई तरीका है? (ताकि तक पहुँचने a
या b
दूसरे उदाहरण में एक त्रुटि को जन्म देती है।)
आलसी होने के कारण, मैं एक समाधान है कि बार-बार बॉयलर-प्लेट कोड :)
बिना काम करता है पसंद करेंगे, तो इस मुद्दे को अस्पष्ट है पायथन संस्करण के संदर्भ में, मैं ज्यादातर पायथन 3.3 और उससे ऊपर में रूचि रखता हूं।
नहीं, नहीं है। अन्यथा कोई अंतर्निहित कभी काम नहीं करेगा। –
पायथन को तोड़ने की कोशिश करने के बजाय बेहतर समाधान * उचित परीक्षण * का उपयोग करना है। –
अंतिम तीन पंक्तियों को एक और समारोह में डाल दिया ... – LittleQ