2012-06-11 5 views
8

のための対他の私はそれのelifを考えた:はのためのelif

else: 
    if: 

の省略形だったが、のために

を使用することはできません - のelif:

のためだけ

- else:if:

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

私はPythonを約7年間プログラミングしてきましたが、 'for'文で' else'節を知りませんでした... –

+3

@AndrewJaffe:それは理解できます。それは特に有用ではない。私が使った時はほんの一握りしかなかったと思う。 –

+0

@JoelCornett私はいつも使っています。 – becko

答えて

11

elif:は、else: ifに展開されるマクロではなく、if: statementのコンテキストでのみ有効な構文要素です。通常、else: ifは新しいifブロックを開きます。しかし、elif:はそうしていません。

+2

そうでなければ、1つの 'if'文で複数の' elif'節を持つことができないので、これは幸いです。 (...後続のものが* 'else:if'ブロックにインデントされるように拡張されない限り、私は仮定しています...うわー、私は今、私の脳をブリーチする必要があります。) – weronika

+1

しかし、 elif'を 'for'の後に置いたのですよね?私には、私たちが「他のために」行うことができるという事実はあるが、「...エリフ...エリフ...そうでない」というものは一貫していないようだ。 – becko

+0

'for'の後に' elif'を置くのはどのように意味がありますか?ループの後の 'else'は' if'と同じことをしません(それは混乱します)。 – kindall

8

修正。 もtry .. except .. elseになります。

9

forelseは、特別な場合の使用であり、ifelif構造と同じではありません。とにかくforelseの意味は "私たちが壊れずにループを完了したならば、このことをしてください"という意味でforの文脈ではelifは実際に意味をなさない。それはバイナリロジックです。 elifは、このバイナリ決定の文脈で意味をなさない。

+0

'else'は' while'もありますが、 'else'よりもそれほど頻繁には使用されません。 – MRAB

+0

@MRAB 'elif'は' else'でも文脈上の意味を持ちません。それ以外の場合は 'else'を除いて' try'で 'else'を実行します。ポイントは、それが論理的に意味をなさないため、それらのコンテキストには「elif」が存在しないということです。 –

+0

「elif」は、「... elif ... else」のコンテキストでは意味があります。それを 'for ... else if ... else'と同等と考えてください。それについて何が分かりませんか?私はPythonの構文はそれを許可していない知っている。私は意味論的に*それが意味をなさないと言っています。 – becko

4

あなたが参照している 'else'は 'for'コマンドに関連付けられていて、 'if'コマンドには関連付けられていません。 'elif'は 'if'コマンドで使用すると意味があります。

'for'コマンドの 'else'ブロックは、 'for'ブロックが 'break'コマンドで途中で終了していない場合にのみ実行されます。paragraph 4.4を参照してください。