2011-04-03 20 views
12
def say_boo_twice(): 
    global boo 
    boo = 'Boo!' 
    print boo, boo 

boo = 'boo boo' 
say_boo_twice() 

उत्पादनअजगर वैश्विक चर

बू है! बू!

नहीं के रूप में मैं उम्मीद थी। जब से मैं boo वैश्विक रूप में घोषित किया है, क्यों उत्पादन नहीं है:

बू बू बू बू

+3

वैश्विक चर डरावने हैं। – intuited

+1

यह अनुमानित आउटपुट है। आप बू को असाइन करते हैं, फिर आप इसे दो बार प्रिंट करते हैं। –

+0

यह एक भ्रमित उदाहरण है। "बू बू" के लिए "दो बार कहने" के बजाय मूल्यों को क्यों न बदलें? गंदा सोच वैश्विक परिभाषा प्रबंधन की भयावहताओं का जिक्र करने के लिए – dcsan

उत्तर

24

आप अपने समारोह के अंदर boo बदलने के बाद, क्यों नहीं बदल जाएगा? इसके अलावा, वैश्विक चर खराब हैं।

+8

+1। – Kayla

+0

धन्यवाद। मैं समझ गया। वैश्विक चर का उपयोग करने के बजाय –

+2

, कार्यों में उपयोग किए जाने वाले चर को संभालने का बेहतर तरीका क्या है? –

5

आप फिर से बताए जाते हैं बू आप वैश्विक रूप में यह घोषणा के बाद, इसलिए मूल्य पिछले एक आप इसे करने के लिए सौंपा है। यदि आपने लाइन तीन हटा दी है, तो आपको वह आउटपुट मिलेगा जो आप उम्मीद करते हैं।

17

क्योंकि आप दाहिने हाथ से पहले पुन: असाइन। boo = 'Boo!' पर टिप्पणी करें और आप जो भी वर्णन करेंगे उसे प्राप्त करेंगे।

def say_boo_twice(): 
    global boo 
    #boo = 'Boo!' 
    print boo, boo 

boo = 'boo boo' 
say_boo_twice() 

इसके अलावा कि global boo अनावश्यक है, boo वैश्विक क्षेत्र में पहले से ही है।

def say_boo_twice(): 
    #global boo 
    boo = 'Boo!' 
    print boo, boo 

say_boo_twice() 
print "outside the function: " + boo # ERROR. boo is only known inside function, not to this scope 
3

अनिवार्य रूप से आप बू पुन: असाइन जब आप फ़ंक्शन को कॉल करें: यह जहां global एक फर्क

def say_boo_twice(): 
    global boo 
    boo = 'Boo!' 
    print boo, boo 

say_boo_twice() 
print "outside the function: " + boo #works 

जबकि बनाता है।

चेक यह कैसे वैश्विक() और स्थानीय लोगों() कार्यों के साथ काम करता है।

0

एक उदाहरण मैं तुम्हें अजगर में वैश्विक और स्थानीय चर के बीच अंतर को समझना चाहते हैं देने से पहले

वैश्विक चर: यह वर्तमान मॉड्यूल के लिए विशिष्ट है

स्थानीय चर: यह वर्तमान के लिए विशिष्ट है फ़ंक्शन या विधियों के रूप में हम इसे पायथन

क्या कहते हैं यदि स्थानीय और वर्तमान चर दोनों का एक ही नाम बू है?

ऐसे मामले में अगर आप एक ही विधि के क्षेत्र में वैश्विक के रूप में अपने चर बू परिभाषित या कार्य करते हैं यह डिफ़ॉल्ट रूप से स्थानीय चर

रूप में इसका इस्तेमाल अपने कोड के लिए आ रहा नहीं है

आप अपने विधि say_boo_twice() में वैश्विक रूप बू को परिभाषित किया है। पकड़ तब होती है जब आप बूओ = 'बू!'उस विधि में आप वास्तव में अधिलेखित कर रहे हैं क्या आप बू = के रूप में पहले से प्रारंभ' बू बू '

इस कोड

प्रयास करें - मैं विधि के अंदर चर बू आरंभ नहीं किया है say_boo_twice()

def say_boo_twice():  
    global boo 
    print boo, boo 

boo = 'boo boo'  
say_boo_twice() 

ऑल द बेस्ट !!! !! !

0

ग्लोबल बू केवल विधि in_boo_twice के अंदर वैश्विक है और इस विधि के अंदर एक मूल्य फिर से असाइन किया गया है। आपको उस व्याख्यात्मक या गुंजाइश को समझने की आवश्यकता है जहां यह वैश्विक हो सकता है या आप इसे क्या चाहते हैं। इस संदर्भ में, प्रिंटिंग से ठीक पहले, इसे 'बू!' का मान सौंपा गया था। और यही वह सही ढंग से मुद्रित है।

संबंधित मुद्दे