2017-03-02 56 views
2

我在if语句中有很长的一组表达式。但显然我不允许分裂我的if语句,即使我没有为显而易见的python原因将缩进分块。我是一个Python新手,所以我很抱歉,如果我的问题很烦人。if block的可读性

理想情况下,我想有if声明安排是这样的:

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

现在这一切都在同一行并没有很多的可读性。

+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条件括号:

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

我必须留意,在一个单一的if声明有很多条件似乎有点像一个代码味道给我的。也许可以考虑创建帮助函数来封装某些逻辑,或者使用多个语句。

3

你可以使用旧式backslashing的第一线,别人并不需要它,因为你使用括号:

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留下语法错误(省略了一个右括号)只是为了误导我们。 –

+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