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()
上記のように複数の条件のスタイルを設定すると、コードが読みやすくなるという利点があります。また、複雑な条件の表現がすっきりします。
and
や or
などの論理演算子キーワードが条件に含まれているシナリオでは、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