2011-10-12 16 views
17

में with` बयान मैं अजगर 2.7 में कई संदर्भ with बयान की सुविधा चाहते:एकाधिक संदर्भ `पायथन 2.6

with open('a.txt') as a, open('b.txt') as b: 
    do_many_amazing_things(a, b) 

हालांकि, मैं 2.6 के साथ संगतता बनाए रखने के लिए की जरूरत है।

with को __future__ के माध्यम से 2.5 तक लाया गया था, लेकिन मैं दस्तावेज़ में 2.6 पर बैक-पोर्ट किए जाने वाले एकाधिक संदर्भ संस्करण के बारे में कुछ भी नहीं ढूंढ पा रहा हूं।

क्या मुझे कुछ याद आया?

संपादित करें: मुझे पता है कि with कथन घोंसला संभव है। मैं पूछ रहा हूं कि बयानों के साथ एकाधिक का उपयोग करना संभव है या नहीं।

+0

मुझे वास्तव में हैरान है कि यह सुविधा जोड़ा गया था पायथन के लिए - मार्गदर्शक सिद्धांत हमेशा चीजों को सरल और स्पष्ट बनाने के लिए किया गया है, लेकिन चूंकि 'कथन' के साथ घोंसले करना बहुत स्वाभाविक है ... –

+2

यदि आप 2 से अधिक कर रहे हैं तो यह बदसूरत हो जाता है। –

उत्तर

20

यदि कोई पिछड़ा-संगत समकक्ष संभव नहीं है, तो मैं एकाधिक संदर्भ with कथन एकल-संदर्भ, नेस्टेड with कथन का एक सेट बनाकर इसे संभाल सकता हूं।

with open('a.txt') as a: 
    with open('b.txt') as b: 
     do_many_amazing_things(a, b) 

संपादित अपने संपादित संबोधित करने के लिए:

आप अतिरिक्त with बयान घोंसला बनाने से नहीं पर जोर देते हैं, तो आप हमेशा contextlib

import contextlib 
with contextlib.nested(open("a.txt"), open("b.txt")) as (a, b): 
    do_many_amazing_things(a,b) 

के रूप में उपयोग कर सकते हैं से भविष्य में आयातित कई with बयान प्रयोग करने के लिए with, यह संभव नहीं है जब तक मुझे पता है कि

+0

संदर्भित समाधान विफल नहीं होगा अगर पहली फ़ाइल खुलती है लेकिन दूसरी नहीं - पहली फाइल बंद नहीं होगी? –

+0

@ मार्क रैंडम मुझे विश्वास है, मुझे इसका उल्लेख करना चाहिए था, लेकिन ऑस्टिन के इरादों को मैं सबसे नज़दीकी चीज़ ढूंढ सकता हूं – jsvk

+0

मुझे नहीं लगता कि आप क्यों कहते हैं कि पहली फ़ाइल बंद नहीं होगी। यदि इसे एक तरफ लिखना दूसरे जैसा ही है, तो पहली फ़ाइल बंद हो जाएगी इससे कोई फर्क नहीं पड़ता कि निष्पादन प्रवाह पहले संदर्भ से कैसे निकला। – Gabriel

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