2011-02-20 12 views
6

द्वारा संदर्भित अजगर भाषा संदर्भ से (v 3.1, यहाँ देखें - http://docs.python.org/py3k/reference/executionmodel.html#naming-and-binding):बंधन खोलने एक नाम एक संलग्न गुंजाइश

यह एक नाम एक संलग्न गुंजाइश द्वारा संदर्भित निकल अवैध है, संकलक एक सिंटेक्स त्रुटि की रिपोर्ट करेगा।

लेकिन जब मैं निम्नलिखित कोड चलाएँ:

a = 3 

def x(): 
    global a 
    del(a) 

print(a) 
x() 

यह ठीक काम करता है; और जब मैं कॉल का ऑर्डर बदलता हूं:

x() 
print(a) 

मुझे एक नाम त्रुटि मिलती है, सिंटैक्स त्रुटि नहीं। जाहिर है, मैं नियम को सही ढंग से समझ नहीं रहा हूं। क्या कोई इसे समझा सकता है? धन्यवाद।

+0

क्या आप उद्धरण कहां से लिंक कर सकते हैं? यह पृष्ठ कहता है कि नेमररर उठाया जाना चाहिए: http://docs.python.org/py3k/reference/simple_stmts.html#the-del-statement – carl

+0

@carl: मुझे इसे खोजने के लिए कुछ ले गए; http://docs.python.org/py3k/reference/executionmodel.html#naming-and- बाइंडिंग में कई पैराग्राफ। –

+0

भाषा संदर्भ के उचित खंड में लिंक जोड़ा गया। –

उत्तर

3

मैं अजगर-devel सूची पर लोगों से संपर्क किया और यहाँ मैं क्या मिला है:

वास्तव में आपको लगता है कि अब 3.2+ कर सकते हैं। मैंने अब उस वाक्य को हटा दिया है।

तो, वास्तव में यह एक दस्तावेज त्रुटि का प्रकार था।

4

मुझे नहीं लगता कि नियम वैश्विक दायरे पर लागू होता है। वैश्विक दायरा हमेशा पूरी तरह से सुलभ है।

यहाँ एक उदाहरण है:

>>> def outer(): 
...  a=5 
...  def inner(): 
...   nonlocal a 
...   print(a) 
...   del a 
... 
SyntaxError: can not delete variable 'a' referenced in nested scope 
संबंधित मुद्दे