मैंने हाल ही में पाइथन के विभिन्न परिसर बयानों में अन्य खंडों से निपटने के तरीके में एक असंगत असंगतता पर ठोकर खाई है। चूंकि पाइथन बहुत अच्छी तरह डिज़ाइन किया गया है, मुझे यकीन है कि एक अच्छी व्याख्या है, लेकिन मैं इसके बारे में नहीं सोच सकता।अगर कथन के लिए/कथन के विरोध में कथन के लिए अलग-अलग व्यवहार क्यों करते हैं?
if condition:
do_something()
else:
do_something_else()
यहाँ, do_something_else()
केवल तभी condition
गलत है, अपेक्षा के अनुरूप क्रियान्वित किया जाता है:
निम्नलिखित पर विचार करें।
इसी तरह,
try:
do_something()
except someException:
pass:
else:
do_something_else()
finally:
cleanup()
do_something_else()
में ही अगर कोई अपवाद नहीं हुआ निष्पादित किया जाता है।
लेकिन लूप के लिए या किसी अन्य खंड में हमेशा एक निष्पादित किया जाता है, चाहे for/while block
की सामग्री निष्पादित की गई हो या नहीं।
for i in some_iterator:
print(i)
else:
print("Iterator is empty!")
हमेशा प्रिंट होगा "इटरेटर खाली है!", कि क्या मैं some_iterator = []
या some_iterator = [1,2,3]
का कहना है। while-else
खंडों में वही व्यवहार। मुझे लगता है कि else
इन मामलों में finally
की तरह व्यवहार करता है। मैं क्या देख रहा हूँ
मुझे आश्चर्य है कि पायथन वाक्यविन्यास की अनुमति देता है। अधिकांश अन्य भाषाओं में - केवल तभी उपयोग किया जा सकता है जब- या स्विच-स्टेटमेंट्स के साथ उपयोग किया जा सके। फॉर-लूप और ट्राई-कथन प्रवाह को नियंत्रित कर सकते हैं, लेकिन वे एक कथन की तरह सशर्त नहीं हैं, इसलिए उनके पास कोई जगह नहीं है। – shuckster
इसके लायक होने के लिए, पाइथन-विचार सूची पर/else, et al के लिए हाल ही में एक लंबी चर्चा हुई है, यहां संक्षेप में: http://article.gmane.org/gmane.comp.python.ideas/6131 /। Guido खुद इसके बारे में दूसरे विचार करने के लिए स्वीकार करते हैं: http://article.gmane.org/gmane.comp.python.ideas/6133/ –
इन लिंक के लिए धन्यवाद! –