Python 中设置多行 if 语句的样式

Python 中多行 if 语句的推荐样式是使用括号分隔 if 语句。 PEP8 样式指南建议在反斜杠上使用括号,并在布尔值 and 和 or 运算符之后放置换行符。

if ('hi' == 'hi' and
        len('hi') == 2 and
        2 == 2):  # ?️ 最后一行有额外的缩进
    print('success')

# ?️ 所有条件都在不同的行上
if (
    'hi' == 'hi' and
    len('hi') == 2 and
    2 == 2
):
    print('success')

# ?️ 使用反斜杠续行(pep8 不鼓励)
if 'hi' == 'hi' and \
        len('hi') == 2 and \
        2 == 2:
    print('success')

根据官方 PEP8 样式指南,包装长行的首选方法是在括号、方括号和大括号内使用 Python 的隐含行延续。

该指南不建议使用反斜杠来续行。

该指南还建议在布尔运算符 and 和 or 之后放置换行符。

代码示例中的第一个示例使用额外的缩进来区分 if 语句中的条件和 if 块中的代码。

# ✅ GOOD
if ('hi' == 'hi' and
        len('hi') == 2 and
        2 == 2):  # ?️ 最后一行有额外的缩进
    print('success')

这使得我们的代码比对条件和 if 块使用相同级别的缩进更具可读性。

# ⛔️ BAD (same level of indentation for conditions and body of if statement)
if ('hi' == 'hi' and
    len('hi') == 2 and
    2 == 2):
    print('success')

我们还可以将 if 语句中的所有条件移动到单独的行中。

# ✅ GOOD
if (
    'hi' == 'hi' and
    len('hi') == 2 and
    2 == 2
):
    print('success')

使用这种方法时,我们不必对条件使用额外的缩进,因为右括号将条件与 if 语句的主体分开。

对于更长的 if 语句,我发现这比前面的示例更容易阅读。

尽管 PEP8 样式指南不鼓励使用反斜杠来续行,但它仍然是一种完全有效的语法。

if 'hi' == 'hi' and \
        len('hi') == 2 and \
        2 == 2:
    print('success')

使用这种方法时,请确保为最后一行条件添加额外的缩进。

如果大家对条件和 if 语句的主体使用相同级别的缩进,则代码将变得难以阅读。

# ⛔️ BAD (same level of indentation for conditions and `if` body)
if 'hi' == 'hi' and \
    len('hi') == 2 and \
    2 == 2:
    print('success')