Python はなぜ for ループと while ループの後に 'else' を使用するのでしょうか? 質問する

Python はなぜ for ループと while ループの後に 'else' を使用するのでしょうか? 質問する

この構造がどのように機能するか理解しています。

for i in range(10):
    print(i)

    if i == 9:
        print("Too big - I'm giving up!")
        break
else:
    print("Completed successfully")

elseしかし、ここで がキーワードとして使用されている理由がわかりません。これは、問題のコードforがブロックが完了しない場合にのみ実行されることを示唆しているため、実際の動作とは逆です。どのように考えても、私の脳はステートメントからforブロックにシームレスに進むことができませんelse。私にとっては、continueまたはcontinuewithの方が意味をなします (そして、私はそのように読むように自分自身を訓練しようとしています)。

Python プログラマーがこの構造を頭の中で (または、お望みなら声に出して) どのように読むのか、気になります。おそらく、このようなコード ブロックをより簡単に解読できるようにする何かを見逃しているのでしょうか。


この質問は、根本的な設計上の決定、つまりこのコードを書けることがなぜ有用なのかに関するものです。Python while文のelse句構文の意味についての具体的な質問については、

ベストアンサー1

一般的な構成は、何かが見つかるまでループを実行し、その後ループから抜け出すことです。問題は、ループから抜け出すかループが終了するかによって、どちらのケースが発生したかを判断する必要があることです。1 つの方法は、フラグを作成するか、ループがどのように終了したかを確認する 2 回目のテストを実行できる変数を保存することです。

たとえば、リストを検索し、フラグ項目が見つかるまで各項目を処理し、その後処理を停止する必要があるとします。フラグ項目が見つからない場合は、例外を発生させる必要があります。

Pythonのfor...else構文を使用すると

for i in mylist:
    if i == theflag:
        break
    process(i)
else:
    raise ValueError("List argument missing terminal flag.")

これを、この構文糖衣を使用しない方法と比較してください。

flagfound = False
for i in mylist:
    if i == theflag:
        flagfound = True
        break
    process(i)

if not flagfound:
    raise ValueError("List argument missing terminal flag.")

最初のケースでは、 はraiseそれが動作する for ループにしっかりとバインドされます。 2 番目のケースでは、バインドはそれほど強力ではなく、メンテナンス中にエラーが発生する可能性があります。

おすすめ記事