Python for...else... ステートメント

3261 ワード

条件文はプログラミング言語では普通ですが、プログラムを書く必要がある限り、ほぼifを使用します.else ... このような条件文は条件判断を行う.だから汎用プログラミング言語はifを提供します...else ... このような文法.Pythonも例外ではありませんが、Pythonはifだけではありません...else ... このような文法は、forも提供されています.else ...、 try ... except ... else ... などという文法があります.今日はforについてのみ議論します.else ... 文法を見て、Pythonのelse文がforの後についているのとifの後についているのと何が違うのかを見てみましょう.
コードの例を見てみましょう.
for i in [1, 2, 3]:
    print(i)
else:
    print('done')

実行結果:
1
2
3
done

このコードを実行しない場合は、このコードの書き方だけを見て、doneではなく1、2、3の3つの数しか実行されていないと推測するかもしれません.ifで...else ... のロジックでは、ifの条件が真であれば、else文のコードブロックは実行されません.しかし、印刷結果によると、明らかに私たちの予想に合わない.疑問を持って、次のサンプルコードを見てみましょう.
for i in []:
    print(i)
else:
    print('done')

実行結果:
done

今回の結果はdoneしかなく、このコードはもっと合理的に見えるようです.for遍歴のリストが空なので条件が成立しないなら、elseの論理を実行すべきで、本当にそうですか?次に、次の例を見てみましょう.for文ブロックにcontinuebreakの2つのキーワードが表示されることを知っています.まず、for文ブロックにcontinueが含まれている場合、どのような結果になるかをテストします.
for i in [1, 2, 3]:
    if i == 2:
        continue
    print(i)
else:
    print('done')

実行結果:
1
3
done

この結果は、第1セグメントのコード例とあまり差がないが、i == 2のときに、今回のループをスキップし、次のループを実行し続ける.最後に、for文ブロックにbreakが含まれている場合、どのような結果が得られるかを見てみましょう.
for i in [1, 2, 3]:
    if i == 2:
        break
    print(i)
else:
    print('done')

実行結果:
1

上のコードの印刷結果によると、Pythonのforが分かったかもしれないと思います.else ... 文の実行特性.そう、実はifに従えば...else ... forを理解するために反発する論理です...else ...,では、for文ブロック内のbreakは、elseと本当に条件文のペアである.forループでbreak文が実行されると、else文ブロック内のコードは実行されなくなります.
Pythonのforを知りました...else ... 文の文法ですが、何の役に立ちますか.最初はforに触れましたelse ... 文の時は全く役に立たないと思っていたので、長い間Pythonコードを書いたことがなく、Pythonが提供したこの文法さえほとんど忘れてしまいました.ERPのプロジェクトを書き始めるまで、forを見つけました.else ... の真の用途.ERPと書くと、さまざまな複雑なビジネスニーズに直面するため、forを使うことができれば...else ... 問題を解決すると、コードロジックが明確になり、プロジェクトのメンテナンス性が大幅に向上します.forで反復可能オブジェクトをループし、反復可能オブジェクトの内部に要素が条件を満たしている場合は、論理を実行し、breakを削除します.すべてが一致していない場合は、elseの文を実行して別の論理を実行します.サンプルコードは次のとおりです.
for i in      :
    if     :
              
        break
else:
           

このコードは明らかに次のforを使わないよりも...else ... の書き方は可読性が高く、Pythonicの書き方にもっと合っています.
flag = False
for i in      :
    if     :
              
        flag = True
        break

if not flag:
           

以上、私がforに...else ... の理解と使用体験は、同じ問題に直面したときに、あなたに役立つことを望んでいます.