关于python:if块的可读性

Readability of if block

我在if语句中有一组非常长的表达式。但显然,即使出于明显的Python原因,不使用缩进拆分块,也不允许拆分if语句。关于python,我是个新手,所以如果我的问题很烦人,我很抱歉。

理想情况下,我希望将if语句按如下方式排列:

1
2
3
4
5
6
7
8
9
10
11
if (expression1 and expression2) or
(
expression2 and
(
(expression3 and expression4) or
(expression3 and expression5) or
(
expression4 and (expression6 or expression7)
)
):
    pass

现在它都在一行中,不太可读。


您可以对第一行使用旧样式的反斜杠,其他人不需要它,因为您使用的是括号:

1
2
3
4
5
6
7
8
9
10
11
12
if (expression1 and expression2) or \
(
expression2 and
(
(expression3 and expression4) or
(expression3 and expression5) or
(
expression4 and (expression6 or expression7)
)
)
):
    pass

请注意,您的示例必须是固定的,因为缺少一个右括号。


python有几种允许多行语句的方法。在您的例子中,您可以简单地将整个if条件括在括号中:

1
2
3
4
5
6
7
8
9
10
11
if ((expression1 and expression2) or
(
expression2 and
(
(expression3 and expression4) or
(expression3 and expression5) or
(
expression4 and (expression6 or expression7)
)
)):
    pass

不过,我应该注意到,在一条if语句中有这么多条件对我来说似乎有点代码味道。可能考虑使用createhelper函数来封装某些逻辑,或者使用多个if语句。


使用将表达式放在多行上,甚至可以识别它以提高可读性:

1
2
3
4
5
6
7
8
9
10
if (expression1 and expression2) or \
(expression2 and \
    (\
    (expression3 and expression4) or \
    (expression3 and expression5) or \
        ( \
         expression4 and (expression6 or expression7) \
         )\
         ):
    pass


你可以这样做:

1
2
3
4
5
6
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