python - Is it worth closing files in small functions? -


आप कहते हैं:

  def my_func (): fh = open (... ) कोशिश करो: print fh.read () अंत में: fh.close ()   

मेरा पहला प्रश्न यह है कि क्या कोशिश / अंत में (या इसके साथ) कथन के लायक है? फ़ैशन समाप्त होने पर फ़ाइल को बंद नहीं होने पर क्या कचरा संग्रह के माध्यम से बंद हो जाता है?

मुझे एक नुस्खा फॉर्म "बेकन की रसोई की किताब" पढ़ने के बाद इस पर आया था, जहां

  all_the_text = खुली ('thefile.txt')। Read ()   

इस टिप्पणी के साथ आता है: "जब आप ऐसा करते हैं, तो आपके पास फाइल ऑब्जेक्ट के संदर्भ में कोई संदर्भ नहीं होता है परिचालन में, अभ्यास में पायथन एक बार संदर्भ में कमी की सूचना देता है, और तुरंत फाइल बंद कर देता है। "

मेरा फ़ंक्शन उदाहरण लगभग समान है। आपके पास एक संदर्भ है, यह सिर्फ यही है कि संदर्भ में एक बहुत ही कम जीवन है।

मेरा दूसरा प्रश्न यह है कि: Martelli के बयान में "तत्काल" क्या होता है? यद्यपि आपके पास बिल्कुल भी संदर्भ नहीं है, फिर भी क्या कचरा संग्रहण समय पर फ़ाइल समापन हो रहा है?

फ़ाइल को स्वयं को बंद करने के लिए यह अच्छा अभ्यास है के साथ कथन को साफ कोड की ओर जाता है और यह स्वचालित रूप से फ़ाइल को बंद कर देता है (जो कि एक अच्छी बात है)।

यद्यपि पायथन उच्च-स्तरीय प्रोग्रामिंग भाषा है, फिर भी आपको इसकी आवश्यकता है आप क्या कर रहे हैं के नियंत्रण में है अंगूठे का एक नियम के रूप में: यदि आप कोई फ़ाइल खोलते हैं, तो इसे बंद होना भी आवश्यक है। आपके कोड में ढलान होने का कोई अच्छा कारण नहीं है: -)

आपके दूसरे प्रश्न के बारे में: यह तुरंत चलने वाला नहीं होगा, यह तब चलाएगा जब कचरा कलेक्टर फैसला करता है कि यह चलने का समय है। जब फाइल ऑब्जेक्ट को वितरित किया जाता है, तो पायथन फ़ाइल को बंद कर देगा। यहां पायथन में कचरा संग्रहण पर हैं (यह मॉड्यूल भी देखता है), यह एक रोचक पढ़ा है।

यह भी दिखाता है कि पायथन का कूड़ा संग्रह कचरा तय करने से पहले आवंटित और वितरित वस्तुओं की संख्या के आधार पर सीमा का उपयोग करता है एकत्रित करते हैं। यदि आपकी फ़ाइल बड़ी है तो पायथन फ़ाइल को आवश्यक से अधिक समय तक खोल सकता है क्योंकि कूड़ेदान संग्रह कोड अभी तक नहीं चल सकता है।

Comments