Python 複数行の if 条件

Neema Muganga 2023年10月10日
Python 複数行の if 条件

Python の if ステートメントの複数行の条件は、PEP8 でさまざまな許容可能な方法で提供されています。

まず最初に、複数の条件ステートメントを 1 行に配置しないでください。代わりに、複数の条件のこの 1 行を分割し、括弧で囲みます。

# do not define the multiple conditions in a single line like this
if (
    firstcondition == "something"
    and secondcondition == "something else"
    and thirdcondition == "something different"
):
    # something_to_be_done
    pass

PEP8 は、複数行の条件ステートメントを分離するための継続行の使用に関するガイドです。これらの線は、新しい線の先頭から 4 スペースのインデントで垂直に配置され、間隔が空けられている必要があります。閉じ括弧とコロンは、状態の終わりを明確に示しています。

どうやら、Python には、if のような 2 文字のキーワード、単一のスペース、および開き括弧を組み合わせるたびに、4つのスペースのインデントを自動的に作成する方法があります。したがって、条件ブレークに余分なインデントを追加する必要はありません。

コード例:

if (this_matches_condition, this_also_matches_condition):  # end of conditions
    get_something_done()

上記のように複数の条件のスタイルを設定すると、コードが読みやすくなるという利点があります。また、複雑な条件の表現がすっきりします。

andor などの論理演算子キーワードが条件に含まれているシナリオでは、PEP8 ガイドに従って、継続条件行の前に論理演算子(and、or)を配置することを強くお勧めします。このスタイルは、Knuth のスタイルと呼ばれます。Python によって設定された自動 4 スペースインデントにより、条件の読みやすさが向上し、すべての条件が垂直方向に整列します。

また、括弧内の状態がより明確になり、短絡評価の利点がもたらされます。

例:

if sttmt1 and (sttmt2 or sttmt3) or name == "Goodman":

    something_happens

これらの複数行の条件ステートメントのスタイルを設定する別の方法は、変数を定義し、これらの条件式をそれに割り当てることです。ただし、この方法は、その後のリファクタリングを制限する傾向があるため、完全には推奨されません。ただし、変数を使用するとコードがより明確になり、プログラムの制御フローをよりよく理解できるようになります。

condition_list = (
    condition_one == "number1"
    and condition_two == "number2"
    and condition_three == "number3"
)

if conditions_list:
    # implement_something
    pass

else:
    # something_else _is _done
    pass

上記のコードの if ステートメントは、condition_list 全体が True の場合にのみ、何かが実装されることを保証します。それ以外の場合、condition_list の条件の 1つでも False の場合、他の何かが実装されます。

条件の周りに余分な括弧のペアをラップして、条件式を視覚的に示すことができます。

if sttmt1 and (sttmt2 or sttmt3) or name == "Goodman":
    something_happens

関連記事 - Python Statement