यह समझने की चाल यह है कि जब आप चर का उपयोग करते हैं, तो = = आप इसे स्थानीय चर के रूप में भी घोषित करते हैं। तो वैश्विक चर के मान को बदलने के बजाय, setA (मान) वास्तव में एक स्थानीय चर (जिसे एक कहा जाता है) को पास किए गए मान पर सेट करता है।
यदि आप मूल्य मुद्रित करने का प्रयास करते हैं तो यह अधिक स्पष्ट हो जाता है के इतने तरह Seta (मान) के शुरू में एक:
def setA(value):
print "Before assignment, a is %d" % (a)
a = value
print "Inside setA, a is now %d" % (a)
आप इस अजगर को चलाने के लिए आप एक उपयोगी त्रुटि दे देंगे का प्रयास करें:
Traceback (most recent call last):
File "scopeTest.py", line 14, in
setA(42)
File "scopeTest.py", line 7, in setA
print "Before assignment, a is %d" % (a)
UnboundLocalError: local variable 'a' referenced before assignment
यह हमें बताता है कि अजगर का फैसला किया है कि setA (value) फ़ंक्शन में एक स्थानीय चर होता है जिसे आप कहते हैं, जिसे आप गधे करते समय बदलते हैं समारोह में इसे अनदेखा करें। यदि आप फ़ंक्शन में (जैसे printA() के साथ असाइन नहीं करते हैं) तो पायथन वैश्विक चर ए
वैरिएबल के रूप में चिह्नित करने के लिए आपको पाइथन, में वैश्विक कीवर्ड का उपयोग करने की आवश्यकता है कि आप वैश्विक चर का उपयोग करना चाहते हैं। इस मामले में जो setA (मान) फ़ंक्शन के भीतर है। तो स्क्रिप्ट हो जाता है:
a = 7
def printA():
print "Value of a is %d" % (a)
def setA(value):
global a
a = value
print "Inside setA, a is now %d" %(a)
print "Before setA"
printA()
setA(42)
print "After setA"
printA()
यह एक लाइन इसके अलावा अजगर बताता है कि आप Seta (मूल्य) समारोह है कि आप वैश्विक चर, नहीं एक स्थानीय चर के बारे में बात कर रहे हैं में चर एक का उपयोग करते हैं।
स्रोत
2009-05-30 14:17:00
* (असभ्य शब्द) * अजगर अंदर
परिभाषित करने की जरूरत – theonlygusti