क्या यह पूरी तरह से आवश्यक है गलत सवाल पूछना है। सवाल यह है कि क्या यह एक अच्छा विचार है।
प्रोग्रामिंग में एक नियम के रूप में, आपको अजीब चीजें करने से बचना चाहिए और नौकरी के लिए सबसे अच्छा उपकरण का उपयोग करना चाहिए । यदि कुछ के पास संसाधनों को जारी करने का एक स्पष्ट तरीका है, तो बस रिलीज़ को स्पष्ट करें और उसके साथ करें:
with arcpy.da.UpdateCursor(fc,fields) as cursor:
d = {k: v for (k,v) in cursor}
आप जो नहीं जानते हैं वह यह है कि with
खंड वास्तव में अतिरिक्त तर्क को आमंत्रित करता है। एक with
खंड एक संदर्भ प्रबंधक, जो एक होना आवश्यक है की आवश्यकता है __enter__
(लागू जब ब्लॉक दर्ज किया गया है) और __exit__
(लागू जब ब्लॉक से बाहर निकल गया है) विधि। विशेष रूप से, __exit__
विधि अपवाद के होते हुए भी लागू होती है, यह सुनिश्चित करते हुए कि कार्यक्रम हमेशा त्रुटि पर भी संसाधन जारी करता है। यह आपके कोड को एक संसाधन प्राप्त होने पर और इसे जारी किए जाने पर स्पष्ट दस्तावेज देता है, और यह सुनिश्चित करता है कि संसाधन को जल्द से जल्द जारी किया जा सके।
इसके विपरीत, आप वास्तव में इसे अपने लिए तुरंत बंद करने के लिए रनटाइम पर निर्भर नहीं हो सकते। इसका कारण यह है कि जिस तरह से यह बंद हो जाता है वह वस्तु के विनाशकर्ता को शामिल करने से होता है, जो तुरंत हो सकता है या नहीं। जब एक विध्वंसक का आह्वान किया जाता है, तो पायथन कोई गारंटी नहीं देता है, केवल यह कि यह तब होगा जब ऑब्जेक्ट कचरा एकत्र किया जाएगा। ( यहां देखें ।) वर्तमान में, पायथन को लागू किया गया है ताकि यह जल्द से जल्द हो जाए क्योंकि अब किसी वस्तु का संदर्भ नहीं है। लेकिन गलती से किसी ऑब्जेक्ट के संदर्भ को प्रचारित करना आसान है, और पायथन का रनटाइम बदल सकता है।
दीर्घकालिक रखरखाव पर भी विचार करें। वहाँ यह करने के लिए कोई दीर्घकालिक संदर्भ अब है, लेकिन क्या 6 महीने में होता है जब आप इतना है कि वहाँ कोड संशोधित करना होगा है एक संदर्भ? अगर कोई और ऐसा करता है तो क्या होगा? परिवर्तन करने वाला व्यक्ति किसी with
ब्लॉक पर स्विच करने के बारे में नहीं सोच सकता है क्योंकि वहां पहले से ही कोई नहीं है। अपने संसाधनों को एक आदत बनाकर सफाई करें , और आपको इससे बहुत कम समस्याएँ होंगी ।
क्या आप वास्तव में कचरा संग्रहण के विवरण को लागू करने के लिए अपने कोड को टाई करना चाहते हैं? क्या आप लगातार इस बारे में सोचना चाहते हैं कि क्या आप एक अपवाद के माध्यम से गलती से एक संदर्भ का प्रचार कर सकते हैं? नहीं, तुम नहीं। कल्पना कीजिए कि जब आर्कपेक में स्क्रिप्ट को लागू किया गया था तब क्या हुआ था। उपयोगकर्ता को केवल फ़ाइल जारी करने के लिए पूरी प्रक्रिया को बंद करने के लिए मजबूर किया जाएगा। तो अपने आप को उस स्थिति में मत रखो। संसाधन स्पष्ट रूप से जारी करें। कोड की एक पंक्ति को सहेजना समस्याओं के जोखिम के लायक नहीं है जो इसका कारण बन सकता है। संदर्भ प्रबंधक पायथन में संसाधनों को प्राप्त करने और जारी करने के लिए मानक तंत्र हैं, और वे इसे बहुत अच्छी तरह से करते हैं।
लब्बोलुआब यह है कि इसे स्पष्ट रूप से जारी नहीं करना एक बुरा विचार है।
यह, निश्चित रूप से, मानता है कि कोड को किसी और को प्रभावित करने की कुछ संभावना है, जैसे कि इसे एक स्क्रिप्ट में रखना जिसे किसी और को चलाने या बनाए रखने की आवश्यकता होगी या यह आपके काम को वितरित करने में देरी कर सकता है यदि आपको आर्कपॉप को सभी तरह से बंद करना है क्योंकि आप अपने परिवर्तनों को सहेज नहीं सकता। यदि आप केवल एक ही व्यक्ति हैं जो किसी समस्या से प्रभावित होगा, तो हर तरह से, आप जो भी चाहते हैं, अच्छी प्रथाओं के सामने उड़ेंगे।
da
: sgillies.net/2011/02/01/get-with-it.html और help.arcgis.com/ en / arcgisdesktop / 10.0 / help / index.html # //… । विशेष रूप से, पहले लिंक के नीचे @JasonScheirer की टिप्पणियों को देखें।