यह व्यवहार शाब्दिक scoping कहा जाता है: वहाँ भाषाओं जहां निम्नलिखित कोड (आवश्यक वाक्य रचना में) काम करता हैं। # 2 में आप जो वर्णन करते हैं उसे डायनामिक स्कोपिंग कहा जाता है, हालांकि मौखिक विवरण भ्रामक है (आप "स्कोप संलग्न करना" कहां कहते हैं, जहां "कॉलिंग फ़ंक्शन" या "सक्रियण रिकॉर्ड" अधिक सटीक होंगे)।
वस्तुतः सामान्य उपयोग में प्रत्येक भाषा सामान्य उपयोग में भाषा लेक्सिकल स्कोपिंग का उपयोग करती है, न केवल पायथन। इसमें सी # और ईसीएमएस्क्रिप्ट/जावास्क्रिप्ट (eval
और with
को छोड़कर) शामिल है, जो मुझे लगता है कि "ईसीएमए भाषा" का मतलब क्या है। भाषाएं हैं, और उनमें से कुछ अभी भी उपयोग में हैं। Emacs Lisp एक है, और पर्ल दोनों लेक्सिकल और गतिशील स्कोपिंग प्रदान करता है।
शाब्दिक तय करने के लिए तर्क सिर्फ प्रदर्शन के लिए (बंद सहित पूर्ण शाब्दिक scoping वास्तव में एक प्रदर्शन लागत, funcarg समस्याओं को देखने नहीं है) नहीं है, यह सादगी और विश्वसनीयता के लिए है। हालांकि भाषा सीखने पर यह आश्चर्यजनक हो सकता है, नियम वास्तव में मृत सरल हैं, इसलिए एक अनुभवी प्रोग्रामर तुरंत बता सकता है कि पहचानकर्ता का उपयोग किस दायरे को संदर्भित करता है। कोई अलगाव में कार्यों को समझ सकता है, क्योंकि इस फ़ंक्शन को कॉल करने वाले लोगों द्वारा निष्पादन प्रभावित नहीं होता है और उन्होंने को उनके चर नाम देने का निर्णय कैसे लिया।
कोड क्या करना चाहिए? –
'अनबाउंड स्थानीय चर' या इस लाइन के साथ कुछ उठाए बिना 'f' प्रिंट करें। – Hyperboreus