2011-11-23 12 views
115

क्या पाइथन में एक चर के मूल्य को साफ़ करने का कोई तरीका है?पायथन में साफ़ चर

उदाहरण के लिए अगर मैं एक द्विआधारी पेड़ को लागू किया गया था:

Class Node: 
    self.left = somenode1 
    self.right = somenode2 

अगर मैं पेड़ से कुछ नोड को दूर करना चाहता था, मैं खाली करने के लिए self.left निर्धारित करने की आवश्यकता होगी।

उत्तर

104

self.left = None के साथ क्या गलत है? क्या मैं आपके प्रश्न का गलत व्याख्या कर रहा हूं, या क्या आप None कीवर्ड से परिचित नहीं हैं?

+7

कोई भी कीवर्ड से परिचित नहीं है। क्या यह अन्य भाषाओं में शून्य के समान है? – Bnicholas

+1

हां; यह शून्य के बराबर है। – Smashery

+0

हां, 'कोई नहीं' 'शून्य ',' शून्य 'और इसके सभी" समानार्थक "जैसा है। – juliomalegria

242

del कीवर्ड करेगा।

>>> a=1 
>>> a 
1 
>>> del a 
>>> a 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
NameError: name 'a' is not defined 

संपादित: लेकिन इस मामले में मैं के लिए self.left = None

+11

कभी-कभी यह पूरी तरह से इसे हटा नहीं देता है, यह केवल स्मृति में उस संदर्भ को हटा देता है। यह स्मृति में भूत चर छोड़ सकता है जो जीसी नहीं मिलता है। –

+2

'del' का भी नुकसान है कि यदि आप एक वेरिएबल को हटाने का प्रयास करते हैं जो अस्तित्व में नहीं है तो यह अपवाद फेंकता है, जो * आमतौर पर * अवांछनीय है। –

+16

मैं बस यह इंगित करना चाहता था कि यदि आपने गलती से एक वेरिएबल घोषित किया है जो आदेशों में निर्मित ओवरराइटिंग है, उदाहरण के लिए, 'type = ...' जब आप टाइप करें (...) 'टाइप करना चाहते हैं तो इसे हटा देना मूल को वापस पाने का सबसे आसान तरीका है कार्यक्षमता। यही है, अगर आप इसे किसी के रूप में नहीं रखते हैं तो भी आप अंतर्निहित कार्य तक पहुंच काट रहे होंगे। – mpacer

2

मतदान में आप इस कोशिश कर सकते हैं:

self.left = None 
59

var = None "मान को साफ़ करता है", वैरिएबल के मान को "शून्य" के मान को "शून्य" के रूप में सेट करने के लिए, हालांकि चर के लिए पॉइंटर रहता है।

del var पूरी तरह से चर के लिए परिभाषा को हटा देता है।

यदि आप बाद में चर का उपयोग करना चाहते हैं, उदा। इसके लिए एक नया मान सेट करें, यानी वेरिएबल बनाए रखें, None बेहतर होगा।

44

असल में, यह चर/संपत्ति को हटा नहीं देता है। यह सब करने के लिए अपना मूल्य None पर सेट किया जाएगा, इसलिए परिवर्तक अभी भी स्मृति में स्थान लेगा। यदि आप मेमोरी से चर के सभी अस्तित्व को पूरी तरह से मिटा देना चाहते हैं, तो आप बस टाइप कर सकते हैं:

del self.left 
+5

मुझे समझ में नहीं आता क्यों = कोई जवाब इतना लोकप्रिय नहीं है। यह सही उत्तर –

+0

ओपी ने कहा 'स्पष्ट' नहीं 'हटाएं'। डेल विशेषता और लुकअप को मार देगा। यह किसी भी व्यक्ति को सेट करने के लिए क्लीनर है, अगर आप 'self.left'' की जांच कर सकते हैं और यह जांचने के लिए पर्याप्त होगा कि नोड खाली है या नहीं। – user1767754

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