2015-07-10 12 views
8

के साथ" ओपन() "बनाम" का उपयोग करके पढ़ी गई है, मुझे पता है कि पाइथन में फ़ाइलों को पढ़ने के बारे में बहुत सारे लेख और प्रश्नों का उत्तर दिया गया है। लेकिन फिर भी मैं सोच रहा हूं कि पाइथन को एक ही कार्य करने के कई तरीके हैं। बस मैं क्या जानना चाहता हूं, इन दो तरीकों का उपयोग करने का प्रदर्शन प्रभाव क्या है?फ़ाइल खुली() "

+0

यह सवाल पहले से ही ऐसा – The6thSense

+4

प्रसंग प्रबंधकों में कहा गया है बहुत बाद में शुद्ध 'खुला()' विधि की तुलना में पेश किया गया था। आप 'timeit.timeit()' विधि के साथ प्रदर्शन को माप सकते हैं। 'संदर्भ प्रबंधक के साथ' किसी भी विफलता पर संसाधनों को बस जारी करता है, इसलिए आपको स्पष्ट 'अंत' खंड लिखना नहीं है। –

उत्तर

18

का उपयोग with बयान प्रदर्शन लाभ के लिए नहीं है, मुझे नहीं लगता कि किसी भी प्रदर्शन लाभ या with कथन का उपयोग करें, जब तक, आप एक ही सफाई गतिविधि कि with कथन का उपयोग स्वचालित रूप से प्रदर्शन करेंगे प्रदर्शन के साथ जुड़े नुकसान देखते हैं है।

आप open समारोह के साथ with बयान का उपयोग करते हैं, तो आप अंत में फ़ाइल को बंद करने के लिए, क्योंकि with अपने आप आपके लिए इसे बंद होगा की जरूरत नहीं है।

इसके अलावा, with कथन केवल खुली फ़ाइलों के लिए नहीं है, जिसका उपयोग संदर्भ प्रबंधकों के साथ संयोजन में किया जाता है। असल में, यदि आपके पास कोई ऑब्जेक्ट है जिसे आप सुनिश्चित करना चाहते हैं कि इसे एक बार किया जाता है या किसी प्रकार की त्रुटियां होती हैं, तो आप इसे context manager और with कथन के रूप में परिभाषित कर सकते हैं, इसके __enter__() और __exit__() प्रविष्टियों पर प्रवेश करने के तरीके को कॉल किया जाएगा और ब्लॉक के साथ बाहर निकलें। PEP 0343 के अनुसार -

यह पीईपी यह कोशिश/अंत में बयान के मानक का उपयोग करता है बाहर कारक संभव बनाने के लिए एक नया बयान "with" अजगर भाषा में जोड़ता है।

इस पीईपी में, संदर्भ प्रबंधक __enter__() और __exit__() विधियों को प्रदान करते हैं जिन्हें कथन के शरीर से प्रवेश करने और निकालने के लिए बुलाया जाता है।

इसके अलावा, with का उपयोग करने और नहीं इसे प्रयोग के प्रदर्शन परीक्षण -

In [14]: def foo(): 
    ....:  f = open('a.txt','r') 
    ....:  for l in f: 
    ....:   pass 
    ....:  f.close() 
    ....: 

In [15]: def foo1(): 
    ....:  with open('a.txt','r') as f: 
    ....:   for l in f: 
    ....:    pass 
    ....: 

In [17]: %timeit foo() 
The slowest run took 41.91 times longer than the fastest. This could mean that an intermediate result is being cached 
10000 loops, best of 3: 186 µs per loop 

In [18]: %timeit foo1() 
The slowest run took 206.14 times longer than the fastest. This could mean that an intermediate result is being cached 
10000 loops, best of 3: 179 µs per loop 

In [19]: %timeit foo() 
The slowest run took 202.51 times longer than the fastest. This could mean that an intermediate result is being cached 
10000 loops, best of 3: 180 µs per loop 

In [20]: %timeit foo1() 
10000 loops, best of 3: 193 µs per loop 

In [21]: %timeit foo1() 
10000 loops, best of 3: 194 µs per loop 
संबंधित मुद्दे