1

私はこれに似た質問をいくつか見ましたが、これは特定の質問に対処していないようです。Pythonを初めて使用するので、何かを見落としているかどうかはわかりません。

質問のコンテキストは次のとおりです。

for i in range(10):
    if something_happens(i):
        break
if(something_happened_on_last_position()):
    # do something            

私のCのバックグラウンドから、for(i = 0; i <10; i ++)が同じことをブレークで実行している場合、iの値は10になり、ブレークが発生しなかった場合は9ではなく、9になります。最後の要素で発生した場合。つまり、メソッドsomething_happened_on_last_position()は、このファクトを使用して両方のイベントを区別できます。ただし、Pythonで気付いたのは、ループを中断せずに正常に実行した後でも、9で停止することです。

両方を区別するのは、フラグのように変数を追加するのと同じくらい簡単かもしれませんが、Cでのそのような使用法は好きではありませんでした。それで、私は興味がありました。

range(11)を使用すると、something_happens(10)が実行されるため、使用できないことに注意してください。'10'はforループの条件で失敗し、something_happens(10)を実行しないため、これはCでは異なります(ここではインデックス0から開始するため、PythonとCの両方で値は10です)。

興味のあるコードチャンクを説明するためだけにメソッドを使用しました。これらは、問題の説明に関係のない他の条件のセットです。

ありがとうございました!

4

2 に答える 2

10

それは逆に機能します:

for i in range(10):
    if something_happens(i):
        break
else: # no break in any position
    do whatever
于 2012-07-11T22:07:27.133 に答える
6

これはまさに、このelse句がforループ上で使用するものです。

for i in range(10):
    if something_happens(i):
        break
else:
    # Never hit the break

このelse句は多くの人を混乱させます。ループで実行した場合、それらすべてに付随するelseと考えてください。else節はbreak決して起こらない場合に起こります。これについての詳細: For / else

于 2012-07-11T22:07:54.593 に答える