2017-03-02 6 views
2

私はifステートメントで非常に長い式を持っています。しかし明らかに、私は明らかなpythonの理由のためにインデント付きのブロックを分割していないときでも、私のif文を分割することは許されません。私はPythonのための完全な初心者ですので、私の質問が迷惑な場合は申し訳ありません。ブロックの可読性

理想的には、私はif文はこのように配置したいと思います:

if (expression1 and expression2) or 
(
expression2 and 
(
(expression3 and expression4) or 
(expression3 and expression5) or 
(
expression4 and (expression6 or expression7) 
) 
): 
    pass 

は今のところ、それはすべて1行で読みやすいのではない多くのであります。

+2

あなたは括弧で全体の事をラップ_could_が、多くの表現が、私にはコードのにおいのビットのように思えることになります。 –

+0

スイッチケースを試してください。 ref:http://stackoverflow.com/questions/11479816/what-is-the-python-equivalent-for-a-case-switch-statement – CSK

+0

完全に変更してみてください。チェックしている各条件に名前を付けるには、ローカル変数または複数の変数を作成します。それから、あなたはそれを分解し、それを短くて同時に読むことができます。 – dsh

答えて

1

Pythonは複数行のステートメントを許可するには、いくつかの方法があります。括弧内の条件があれば、あなたのケースでは、あなたが簡単なあなたの全体を包むことができます。

if ((expression1 and expression2) or 
(
expression2 and 
(
(expression3 and expression4) or 
(expression3 and expression5) or 
(
expression4 and (expression6 or expression7) 
) 
)): 
    pass 

私はしかし、注意しなければならない単一if文でその多くの条件を持つ、私にはコードのにおいのビットのように思えます。おそらく、いくつかのロジックをカプセル化するため、または複数のifステートメントを使用してヘルパー関数を作成することを検討してください。

3

あなたは括弧を使用しているので、他の人がそれを必要としない、最初の行のための古いスタイルのバックスラッシュを使用することができます:1つの閉じ括弧があったので、あなたの例では、固定されなければならなかった

if (expression1 and expression2) or \ 
(
expression2 and 
(
(expression3 and expression4) or 
(expression3 and expression5) or 
(
expression4 and (expression6 or expression7) 
) 
) 
): 
    pass 

ノート行方不明

1

複数行に自分の表現を持っている\を使用して、あなたも、より読みやすくするためにそれをidentをすることができます

if (expression1 and expression2) or \ 
(expression2 and \ 
    (\ 
    (expression3 and expression4) or \ 
    (expression3 and expression5) or \ 
     (\ 
     expression4 and (expression6 or expression7) \ 
     )\ 
     ): 
    pass 
+3

これは、OPが誤解を招くような構文エラー(1つの閉じ括弧を省略)を残したからです。 –

+0

あなたの権利、私の悪い@ LoicM。私は私のコメントを削除します。 –

0

あなたはこれを行うことができます:

t1_2=(expression1 and expression2) 
t3_4=(expression3 and expression4) 
t3_5=(expression3 and expression5) 
t6_7=(expression6 or expression7) 
if test1 or(expression2 and (t3_4 or t3_5 or(expression4 and t6_7)): 
    pass