यदि मैं एक फ़ंक्शन में एक वैश्विक चर बनाता हूं, तो मैं दूसरे चर में उस चर का उपयोग कैसे कर सकता हूं?
हम निम्नलिखित फ़ंक्शन के साथ एक वैश्विक बना सकते हैं:
def create_global_variable():
global global_variable # must declare it to be a global first
# modifications are thus reflected on the module's global scope
global_variable = 'Foo'
एक फ़ंक्शन लिखना वास्तव में अपना कोड नहीं चलाता है। इसलिए हम create_global_variable
फ़ंक्शन को कॉल करते हैं:
>>> create_global_variable()
बिना संशोधन के ग्लोबल्स का उपयोग करना
आप बस इसका उपयोग कर सकते हैं, इसलिए जब तक आप यह बदलने की उम्मीद नहीं करते हैं कि यह किस वस्तु की ओर इशारा करता है:
उदाहरण के लिए,
def use_global_variable():
return global_variable + '!!!'
और अब हम वैश्विक चर का उपयोग कर सकते हैं:
>>> use_global_variable()
'Foo!!!'
किसी फ़ंक्शन के अंदर से वैश्विक चर का संशोधन
किसी भिन्न ऑब्जेक्ट पर वैश्विक चर को इंगित करने के लिए, आपको फिर से वैश्विक कीवर्ड का उपयोग करना होगा:
def change_global_variable():
global global_variable
global_variable = 'Bar'
ध्यान दें कि इस फ़ंक्शन को लिखने के बाद, कोड वास्तव में इसे बदल रहा है अभी भी नहीं चला है:
>>> use_global_variable()
'Foo!!!'
इसलिए फ़ंक्शन को कॉल करने के बाद:
>>> change_global_variable()
हम देख सकते हैं कि वैश्विक चर को बदल दिया गया है। global_variable
नाम अब के लिए अंक 'Bar'
:
>>> use_global_variable()
'Bar!!!'
ध्यान दें कि पायथन में "वैश्विक" वास्तव में वैश्विक नहीं है - यह केवल मॉड्यूल स्तर तक वैश्विक है। इसलिए यह केवल उन मॉड्यूलों में लिखे गए कार्यों के लिए उपलब्ध है जिसमें यह वैश्विक है। फ़ंक्शंस उस मॉड्यूल को याद करते हैं जिसमें वे लिखे गए हैं, इसलिए जब उन्हें अन्य मॉड्यूल में निर्यात किया जाता है, तो वे अभी भी उस मॉड्यूल को देखते हैं जिसमें उन्हें वैश्विक चर खोजने के लिए बनाया गया था।
एक ही नाम के साथ स्थानीय चर
यदि आप एक ही नाम के साथ एक स्थानीय चर बनाते हैं, तो यह एक वैश्विक चर का निरीक्षण करेगा:
def use_local_with_same_name_as_global():
# bad name for a local variable, though.
global_variable = 'Baz'
return global_variable + '!!!'
>>> use_local_with_same_name_as_global()
'Baz!!!'
लेकिन उस गलत स्थानीय चर का उपयोग करने से वैश्विक चर नहीं बदलता है:
>>> use_global_variable()
'Bar!!!'
ध्यान दें कि आपको ग्लोबल्स के समान नामों के साथ स्थानीय चर का उपयोग करने से बचना चाहिए जब तक कि आपको ठीक से पता न हो कि आप क्या कर रहे हैं और ऐसा करने का एक बहुत अच्छा कारण है। मुझे अभी तक ऐसे किसी कारण का सामना नहीं करना पड़ा है।
हमें कक्षाओं में समान व्यवहार मिलता है
टिप्पणी पर एक अनुसरण पूछता है:
अगर मैं एक वर्ग के अंदर एक फ़ंक्शन के अंदर एक वैश्विक चर बनाना चाहता हूं और किसी अन्य वर्ग के अंदर किसी अन्य फ़ंक्शन के अंदर उस चर का उपयोग करना चाहता हूं तो मुझे क्या करना चाहिए?
यहां मैं प्रदर्शित करता हूं कि हमें तरीकों में वैसा ही व्यवहार मिलता है जैसा हम नियमित कार्यों में करते हैं:
class Foo:
def foo(self):
global global_variable
global_variable = 'Foo'
class Bar:
def bar(self):
return global_variable + '!!!'
Foo().foo()
और अब:
>>> Bar().bar()
'Foo!!!'
लेकिन मैं मॉड्यूल नाम स्थान को अव्यवस्थित करने से बचने के लिए, आप वैश्विक विशेषताओं का उपयोग करने के बजाय वैश्विक चर का उपयोग करने का सुझाव दूंगा। यह भी ध्यान दें कि हम self
यहाँ तर्कों का उपयोग नहीं करते हैं - ये वर्ग विधियाँ हो सकती हैं (सामान्य cls
तर्क से वर्ग गुण को परिवर्तित करना ) या स्थैतिक विधियाँ (नहीं self
या नहीं cls
)।