1. ホーム
  2. python

[解決済み] Pythonのループの`else`句の意味を理解するにはどうしたらいいですか?

2022-04-13 17:05:10

質問

多くのPythonプログラマーは、おそらく while ループと for ループには、オプションで else: 節があります。

for val in iterable:
    do_something(val)
else:
    clean_up()

の本文は else 節は、ある種のクリーンアップ処理を行うのに適した場所であり、ループの正常終了時に実行される。つまり、ループの終了時に return または break はスキップします。 else 句の後に終了します。 continue が実行されます。これを知っているのは、私がちょうど 調べる を(またもや)思い出すことができないからです。 いつ その else 節が実行される。

常に?その名の通り、ループの失敗時?通常の終了時?ループが return ? 調べてみないと完全にはわからないのですが。

私は、この不確かさを、キーワードの選択のせいにしています。 else このセマンティクスは信じられないほど記憶に残らない。私の質問は、「なぜこのキーワードがこの目的に使われるのか」ではなく、(回答とコメントを読んでからですが、私はおそらく閉じるに一票を投じます)、「なぜこのキーワードがこの目的に使われるのか」です。 をどのように考えたらよいのでしょうか? else キーワードの意味を理解し、それを記憶することができますか?

との整合性を考えての選択であることは想像がつきます。 try ステートメントの else: 節(これも調べないといけませんが)と、Pythonの予約語のリストを増やさないという目的からです。おそらく else を使えば、その機能が明確になり、記憶に残りやすくなるのですが、私は名前と機能を結びつけたいのであって、歴史的な説明そのものをしたいわけではありません。

の答えは この質問 私の質問と重複しているとして一時的に締め切られたものですが、興味深い裏話がたくさんあります。私の質問は別の焦点を持っています。 else しかし、この質問にはどこかにリンクがあるはずです。

どのように解決するのですか?

その while ステートメント を付けて else

while condition:
    suite
else:
    exhausted

とは全く同じです。

while True:
    if not condition:
        exhausted
        break
    suite

for ステートメント を付けて else

for item in iterable:
    suite
else:
    exhausted

とは全く同じです。

iterator = iter(iterable)
try:
    while True:
        item = next(iterator)
        suite
except StopIteration:
    exhausted

の効果を理解するのに役立ちます。 break または continue ステートメントを使用します。

- については whilefor ステートメントを使用せず else 節を使用する場合は、排出されるステートメントを pass という文を、相当するコードに追加します。

の意味を覚えるために else 節を使用すると、ループ文は次のように解釈できます。

if loop_breaks:
    pass
else:
    exhausted