2012-06-03 3 views
6

में वैश्विक चर को समझना वैश्विक चर का उपयोग करते समय पाइथन में एक अजीब समस्या आई। वैश्विक चर varmod2 में परिभाषित संशोधित करने के लिए mod1.py और mod2.pyपाइथन

mod1 की कोशिश करता:

मैं दो मॉड्यूल (फ़ाइलें) की है। लेकिन में mod2 और varmod में दो अलग-अलग चीजें प्रतीत होती हैं। इस प्रकार, परिणाम दिखाता है कि ऐसा संशोधन काम नहीं करता है।

#code for mod2.py 
global var 
var = 1 
def fun_of_mod2(): 
    print var 

#code for mod1.py 
from mod2 import var,fun_of_mod2  
global var #commenting out this line yields the same result 
var = 2 #I want to modify the value of var defined in mod2 
fun_of_mod2() #but it prints: 1 instead of 2. Modification failed :-(

क्यों ऐसा होता है पर कोई संकेत:

यहाँ कोड है? और में mod2 में परिभाषित val के मान को मैं कैसे संशोधित कर सकता हूं?

धन्यवाद

उत्तर

11

जब आप varmod1 में आयात:

from mod2 import var,fun_of_mod2 

आप इसे नाम varmod1 के नाम स्थान में दे रहे हैं। यह है के रूप में यदि आप इस किया:

import mod2 
var = mod2.var 
fun_of_mod2 = mod2.fun_of_mod2 
del mod2 

दूसरे शब्दों में, वहाँ अब मूल्य के लिए दो नाम, mod1.var और mod2.var हैं। वे पहले समान हैं, लेकिन जब आप mod1.var पुन: असाइन करते हैं, mod2.var अभी भी एक ही चीज़ को इंगित करता है।

आप क्या करना चाहते हैं तो बस है:

import mod2 

तब तक पहुंचने और उसे mod2.var के रूप में चर निर्दिष्ट।

यह ध्यान रखना महत्वपूर्ण है कि पायथन में वैश्विक चर वास्तव में वैश्विक नहीं हैं। वे केवल उन मॉड्यूल के लिए वैश्विक हैं जिन्हें वे घोषित कर रहे हैं। किसी अन्य मॉड्यूल के अंदर वैश्विक चरों तक पहुंचने के लिए, आप module.variable वाक्यविन्यास का उपयोग करते हैं। मॉड्यूल-ग्लोबल नाम को असाइन करने की अनुमति देने के लिए global कथन का उपयोग किसी फ़ंक्शन के अंदर किया जा सकता है (इसके बिना, एक चर को असाइन करने से यह उस फ़ंक्शन में स्थानीय चर बन जाता है)। इसका कोई अन्य प्रभाव नहीं है।

+0

+1, लेकिन इस सवाल का पूरी तरह उत्तर देने के लिए आपको उल्लेख करना चाहिए कि 'वैश्विक' क्या करता है। ओपी की बड़ी समस्या गलतफहमी है जहां यह उपयोगी है। – lvc

+0

अच्छी बात, इसके बारे में कुछ चीजें जोड़ीं। – kindall

+0

धन्यवाद, मुझे लगता है कि मैं समझ गया। – xiaohan2012