2012-06-11 12 views
8

के लिए बनाम मैंने सोचा कि elif:के लिए - और elif

else: 
    if: 

के लिए आशुलिपि था, लेकिन इसके लिए

उपयोग करने के लिए संभव नहीं है - elif:

केवल

के लिए

- अन्य: यदि:

इस कोड में:

for line in source: 
    change_next = False 
    for dataset,artnr,revision in datasets: 
     if dataset in line: 
      change_next = True 
      print " ** " + dataset + " found" 
      datasets.remove((dataset,artnr,revision)) 
      break 
    else: 
     if line.startswith("DstID:"): 
      print line.replace("DstID:","").rstrip() 

    if change_next and "Partno:" in line: 
     destination.write("Partno: " + artnr + "\n") 
     print "Partno: " + artnr 
    elif change_next and "Revno:" in line: 
     destination.write("Revno:" + revision + "\n") 
     print "Revno:" + revision 
    else: 
     destination.write(line) 

अब तक प्रतिक्रिया के लिए धन्यवाद, मेरा प्रश्न अब है: क्या ऐसा करने का यह तरीका है? यदि किसी लाइन में कोई (ज्ञात) डेटासेट नहीं है, तो मैं इसे प्रिंट करना चाहता हूं यदि यह डेटासेट है?

+3

मैं लगभग 7 वर्षों तक पाइथन प्रोग्रामिंग कर रहा हूं और मुझे 'के लिए' कथन में 'else' खंड के बारे में कभी नहीं पता था ... –

+3

@AndrewJaffe: यह समझ में आता है। यह विशेष रूप से उपयोगी नहीं है। मुझे लगता है कि जब मैंने इसका इस्तेमाल किया है तो केवल कुछ ही बार रहे हैं। –

+0

@ जोएल कॉर्नेट मैं इसे हर समय उपयोग करता हूं। – becko

उत्तर

11

elif: एक मैक्रो नहीं है जो else: if तक फैला हुआ है, यह एक वाक्य रचनात्मक तत्व है जो केवल if: statement के संदर्भ में मान्य है। आमतौर पर, else: if एक नया if ब्लॉक खुल जाएगा; हालांकि, elif: ऐसा नहीं करता है।

+2

जो भाग्यशाली है, क्योंकि अन्यथा हमारे पास एक 'if' कथन में एकाधिक' elif' खंड नहीं हो सकते हैं, जो भयानक होगा! (... मुझे लगता है कि जब तक कि बाद वाले लोगों को * तेजी से इंडेंट * * तक विस्तारित नहीं किया जाता है: यदि 'ब्लॉक', जो कि विचित्र होगा ... वाह, मुझे अब मेरे दिमाग को ब्लीच करने की ज़रूरत है।) – weronika

+1

लेकिन यह समझ में आता है कि ' 'के लिए' के ​​बाद elif', सही? मेरे लिए यह तथ्य है कि हम '... के लिए' कर सकते हैं, लेकिन इसके लिए नहीं ... elif ... elif ........... else' असंगत लगता है। – becko

+0

'के लिए' के ​​बाद 'elif' होने का अर्थ कैसे होगा? लूप के बाद 'else' वही काम नहीं करता है जो यह' if' (और यह भ्रमित है) के साथ करता है। – kindall

8

सही। elsetry .. except .. else में भी यही है।

9

forelse एक विशेष मामला उपयोग है, ifelif संरचना के समान नहीं है। eliffor के संदर्भ में वास्तव में समझ में नहीं आता है, क्योंकि forelse का अर्थ है "अगर हमने बिना ब्रेक किए लूप को पूरा किया है, तो यह काम करें"। वह द्विआधारी तर्क है। elif इस बाइनरी निर्णय के संदर्भ में समझ में नहीं आता है।

+0

''''''' भी है, लेकिन इसका उपयोग '' '' '' 'से भी कम होता है। – MRAB

+0

@ एमआरएबी 'एलिफ' '''''' में प्रासंगिक अर्थ नहीं बनाते हैं। या उस मामले के लिए ''else'' को छोड़कर 'कोशिश करें' में। मुद्दा यह है कि उन संदर्भों में 'elif' मौजूद नहीं है क्योंकि यह इसके लिए तार्किक अर्थ नहीं बनाता है। –

+0

मेरे लिए 'elif' 'elif ... else' संदर्भ में' के लिए समझ में आता है। इसके बारे में सोचें 'के लिए ... और अगर ... else'। इसके बारे में क्या समझ में नहीं आता है? मुझे पता है कि अजगर वाक्यविन्यास इसे अनुमति नहीं देता है। मैं कह रहा हूं कि * अर्थात् * यह * समझ में आता है। – becko

4

'अन्य' जिसे आप संदर्भित करते हैं, 'if' कमांड से नहीं, 'for' कमांड से जुड़ा हुआ है। 'elif' केवल 'if' कमांड के साथ उपयोग किए जाने पर समझ में आता है।

'के लिए' कमांड के साथ, 'अन्य' ब्लॉक केवल तभी निष्पादित किया जाता है जब 'फॉर' ब्लॉक को 'ब्रेक' कमांड द्वारा समय-समय पर समाप्त नहीं किया जाता है, paragraph 4.4 देखें।

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