Python Namespace and Scope

 

Python Namespace and Scope


या ट्यूटोरियल मध्ये आपण नेमस्पेस, नावातून ऑब्जेक्टमध्ये मॅपिंग आणि व्हेरिएबलची व्याप्ती शिकू शकता.


What is Name in Python?

शेवटच्या ओळीत आपण 'द झेन ऑफ पायथन' (पायथन इंटरप्रिटरमध्ये हे टाइप करा) वाचले असल्यास, नेमस्पेस ही एक चांगली कल्पना आहेत - चला त्यापैकी आणखी काही करूया! तर ही रहस्यमय नेमस्पेसेस कोणती आहेत? प्रथम नाव काय आहे ते पाहूया.

नाव (ज्याला अभिज्ञापक देखील म्हणतात) हे फक्त ऑब्जेक्ट्सना दिले जाणारे नाव आहे. पायथनमधील प्रत्येक गोष्ट एक वस्तू आहे. अंतर्निहित ऑब्जेक्टमध्ये प्रवेश करण्याचा एक मार्ग म्हणजे नाव.

उदाहरणार्थ जेव्हा आपण असाइनमेंट करतो तेव्हा a = 2, 2 ही मेमरीमध्ये संग्रहित केलेली ऑब्जेक्ट असते आणि आम्ही त्यास संबंद्ध केले जाणारे नाव आहे. आम्ही बिल्ट-इन फंक्शन आयडी () च्या माध्यमातून काही ऑब्जेक्टचा पत्ता (रॅममध्ये) मिळवू शकतो. ते कसे वापरायचे ते पाहूया.

# Note: You may get different values for the id

a = 2
print('id(2) =', id(2))

print('id(a) =', id(a))

Output

id(2) = 9302208
id(a) = 9302208
येथे, दोन्ही समान ऑब्जेक्ट 2 चा संदर्भ देतात, म्हणून त्यांच्याकडे समान आयडी आहे (). चला गोष्टी आणखी एक मनोरंजक बनवूया.
# Note: You may get different values for the id

a = 2
print('id(a) =', id(a))

a = a+1
print('id(a) =', id(a))

print('id(3) =', id(3))

b = 2
print('id(b) =', id(b))
print('id(2) =', id(2))
Output
id(a) = 9302208
id(a) = 9302240
id(3) = 9302240
id(b) = 9302208
id(2) = 9302208
वरील चरणांच्या क्रमाने काय होत आहे? हे स्पष्ट करण्यासाठी आकृती वापरू:
Memory diagram of a variable

सुरुवातीला, ऑब्जेक्ट 2 तयार केला जातो आणि त्यास नाव जोडले जाते, जेव्हा आपण a = a + 1 करतो तेव्हा एक नवीन ऑब्जेक्ट 3 तयार होतो आणि आता या ऑब्जेक्टशी संबंधित आहे.

लक्षात घ्या की आयडी (ए) आणि आयडी (3) मध्ये समान मूल्ये आहेत.

शिवाय, जेव्हा बी = 2 कार्यान्वित होईल तेव्हा नवीन नाव बी मागील ऑब्जेक्ट 2 शी संबंधित होईल.

हे कार्यक्षम आहे कारण पायथनला नवीन डुप्लिकेट ऑब्जेक्ट तयार करण्याची आवश्यकता नाही. नेम बाइंडिंगचे हे डायनॅमिक स्वरूप पायथनला शक्तिशाली बनवते; नाव कोणत्याही प्रकारच्या ऑब्जेक्टचा संदर्भ घेऊ शकते.
>>> a = 5
>>> a = 'Hello World!'
>>> a = [1,2,3]
हे सर्व वैध आहेत आणि अ विविध उदाहरणांमध्ये तीन वेगवेगळ्या प्रकारच्या वस्तूंचा संदर्भ घेईल. कार्ये देखील ऑब्जेक्ट्स असतात, म्हणून नाव देखील त्यांना संदर्भित करू शकते.
def printHello():
    print("Hello")


a = printHello

a()

Output

Hello
हेच नाव फंक्शनला संदर्भित करू शकते आणि आम्ही हे नाव वापरून फंक्शनला कॉल करू शकतो.

What is a Namespace in Python?

आता नावे काय आहेत हे आम्हाला समजले आहे म्हणून आम्ही नेमस्पेसच्या संकल्पनेकडे जाऊ शकतो.

सोप्या भाषेत सांगायचे तर नेमस्पेस म्हणजे नावे संग्रह.

पायथनमध्ये, आपण संबंधित वस्तूंकरिता परिभाषित केलेल्या प्रत्येक नावाचे मॅपिंग म्हणून नेमस्पेसची कल्पना करू शकता.

निर्दिष्ट वेळी भिन्न नेमस्पेसेस सह अस्तित्वात असू शकतात परंतु ती पूर्णपणे वेगळी आहेत.

जेव्हा आपण पायथन इंटरप्रीटर सुरू करतो आणि इंटरप्रेटर चालू असेपर्यंत अस्तित्वात असतो तेव्हा सर्व अंगभूत नावे असलेले नेमस्पेस तयार केले जाते.

हेच कारण आहे की आयडी (), प्रिंट () इत्यादी अंगभूत फंक्शन्स आम्हाला प्रोग्रामच्या कोणत्याही भागामधून नेहमी उपलब्ध असतात. प्रत्येक मॉड्यूल स्वतःचे ग्लोबल नेमस्पेस तयार करतो.

ही भिन्न नेमस्पेसेस वेगळी आहेत. म्हणूनच, भिन्न मॉड्यूलमध्ये अस्तित्वात असू शकते समान नाव टक्कर देत नाही.

मॉड्यूलमध्ये विविध कार्ये आणि वर्ग असू शकतात. जेव्हा एखादे फंक्शन म्हटले जाते तेव्हा लोकल नेमस्पेस तयार होते, ज्यामध्ये सर्व नावे त्यात परिभाषित केलेली असतात. वर्गाचीही अशीच परिस्थिती आहे. पुढील आकृती ही संकल्पना स्पष्ट करण्यास मदत करू शकते.

Python Variable Scope

जरी तेथे विविध अद्वितीय नेमस्पेसेस परिभाषित केल्या आहेत, परंतु आम्ही प्रोग्रामच्या प्रत्येक भागामधून त्या सर्वांमध्ये प्रवेश करण्यास सक्षम असू शकत नाही. व्याप्ती संकल्पना प्रत्यक्षात येते.

व्याप्ती प्रोग्रामचा एक भाग आहे जिथून कोणत्याही उपसर्गांशिवाय नेमस्पेस थेट प्रवेश करता येतो.

कोणत्याही क्षणी, कमीतकमी तीन नेस्टेड स्कोप असतात.

सद्य कार्याची व्याप्ती ज्याची स्थानिक नावे आहेत
मॉड्यूलची व्याप्ती ज्यात जागतिक नावे आहेत
अंगभूत नावे असलेली बाह्यरचना
जेव्हा एखाद्या कार्यामध्ये संदर्भ दिलेला असतो तेव्हा हे नाव स्थानिक नेमस्पेसमध्ये, नंतर जागतिक नेमस्पेसमध्ये आणि शेवटी अंगभूत नेमस्पेसमध्ये शोधले जाते.

दुसर्‍या फंक्शनमध्ये एखादे फंक्शन असल्यास स्थानिक स्कोपमध्ये एक नवीन स्कोप बसविला जातो.

Example of Scope and Namespace in Python.


def outer_function():
    b = 20
    def inner_func():
        c = 30

a = 10
येथे व्हेरिएबल ग्लोबल नेमस्पेस मध्ये आहे. व्हेरिएबल बी बाह्य_फंक्शन () च्या स्थानिक नेमस्पेसमध्ये आहे आणि सी आतील_फंक्शन () च्या नेस्टेड स्थानिक नेमस्पेसमध्ये आहे.

जेव्हा आपण आतील_फंक्शन () मध्ये असतो, तेव्हा सी आपल्यासाठी स्थानिक असते, बी नॉनलॉकल असते आणि एक ग्लोबल असते. आपण c ला नवीन व्हॅल्यूज सोबतच वाचू शकतो परंतु केवळ बी आणि ए इंटर्नलफंक्शन () मधून वाचू शकतो.

जर आपण b ला व्हॅल्यू देण्याचा प्रयत्न केला तर लोकल नेमस्पेसमधे नवीन व्हेरिएबल बी तयार होईल जो नॉनलोकल बीपेक्षा वेगळा आहे. जेव्हा आपण a ला व्हॅल्यू देऊ करतो तेव्हा असेच होते.

तथापि, आम्ही जागतिक म्हणून घोषित केल्यास, सर्व संदर्भ आणि असाइनमेंट जागतिक अ. त्याचप्रमाणे जर आपल्याला व्हेरिएबल b पुन्हा मिळवायचे असेल तर ते नॉनलोकल घोषित केले जावे. पुढील उदाहरण यास अधिक स्पष्टीकरण देईल.
a = 30
a = 20
a = 10
या प्रोग्राममध्ये, तीन वेगवेगळे व्हेरिएबल्स वेगळ्या नेमस्पेसेसमध्ये परिभाषित केल्या आहेत आणि त्यानुसार एक्सेस केले जातात. पुढील कार्यक्रमात असताना,
def outer_function():
    global a
    a = 20

    def inner_function():
        global a
        a = 30
        print('a =', a)

    inner_function()
    print('a =', a)


a = 10
outer_function()
print('a =', a)
प्रोग्रामचे आउटपुट आहे.
a = 30
a = 30
a = 30 
येथे कीवर्ड ग्लोबलच्या वापरामुळे सर्व संदर्भ व असाइनमेंट ग्लोबलकडे आहेत.

टिप्पणी पोस्ट करा

0 टिप्पण्या