2012-05-08 5 views
21

Possible Duplicate:
Using global variables in a function other than the one that created themअजगर में समारोह से वैश्विक चर को नहीं बढ़ाया जा सकता है

मैं निम्नलिखित स्क्रिप्ट है:

COUNT = 0 

def increment(): 
    COUNT = COUNT+1 

increment() 

print COUNT 

मैं सिर्फ वैश्विक चर संख्या में भी वृद्धि करना चाहते हैं, लेकिन यह मुझे निम्न त्रुटि देता है:

Traceback (most recent call last): 
    File "test.py", line 6, in <module> 
    increment() 
    File "test.py", line 4, in increment 
    COUNT = COUNT+1 
UnboundLocalError: local variable 'COUNT' referenced before assignment 

ऐसा क्यों है?

+1

शुरुआती लोगों के बीच 'वैश्विक' का उपयोग आमतौर पर खराब डिजाइन का संकेत होता है। –

+0

'वैश्विक' का उपयोग किए बिना आप किसी फ़ंक्शन के अंदर वैश्विक चर के मान को संशोधित नहीं कर सकते हैं, आप केवल फ़ंक्शन के अंदर इसका मान उपयोग कर सकते हैं। लेकिन अगर आप इसे नया मान असाइन करना चाहते हैं तो आपको पहले 'ग्लोबल' कीवर्ड का उपयोग करना होगा। –

+0

यह आपके प्रश्न का उत्तर देना चाहिए: http://stackoverflow.com/questions/423379/using-global-variables-in-a-function-other-than-the-one-that-created-them ऐसा लगता है जैसे पायथन नहीं होगा वैश्विक मान को तब तक बदलें जब तक आप निर्दिष्ट न करें कि आप यही करना चाहते हैं। –

उत्तर

36

इसकी एक वैश्विक चर तो ऐसा करते हैं:

COUNT = 0 

def increment(): 
    global COUNT 
    COUNT = COUNT+1 

increment() 

print COUNT 

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

+0

समाधान के लिए धन्यवाद। यह बेहतर है क्योंकि मैंने पहले से ही "गिनती + = 1" का उपयोग करने की कोशिश की है लेकिन काम नहीं कर रहा था। यह मेरे लिए काम किया। धन्यवाद। – PravinY

17

ऐसा इसलिए है क्योंकि ग्लोबल्स आपके फ़ंक्शन के दायरे में खून नहीं होते हैं। आप काम के लिए मजबूर करने के लिए इस global कथन का उपयोग करने के लिए है:

>>> COUNT = 0 
>>> def increment(): 
...  global COUNT 
...  COUNT += 1 
... 
>>> increment() 
>>> print(COUNT) 
1 

ध्यान दें कि वैश्विक का उपयोग कर एक बहुत बुरा विचार है - यह कोड को पढ़ने के लिए मुश्किल है, और उपयोग करने के लिए कठिन बना देता है। इसके बजाय, अपने फ़ंक्शन से एक मान वापस करें और कुछ करने के लिए इसका उपयोग करें। यदि आपको कार्यों की एक श्रृंखला से डेटा सुलभ करने की आवश्यकता है, तो कक्षा बनाने पर विचार करें।

यह भी ध्यान देने योग्य है कि CAPITALS सामान्य रूप से स्थिरांक के लिए आरक्षित है, इसलिए इस तरह के अपने चर नामों का नाम देना एक बुरा विचार है। सामान्य चर के लिए, lowercase_with_underscores को प्राथमिकता दी जाती है।

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