HOWTO · Python
Python 多行 if 条件
Python 多行 if 条件
本页内容
要在 Python 中将一个长 if 条件跨行拆分,可以将表达式用括号括起来。这样 Python 就允许隐式续行,因此您不需要在每行末尾加反斜杠。续行的缩进是为了可读性而选择的;Python 不会自动为您添加四个空格。像往常一样,将语句的主体保持在 if 下方缩进。
使用括号拆分长 if 条件
对于无法舒适地放在一行中的条件,括号是最清晰的默认选择。它们让您可以在有意义的位置断开表达式,并将右括号放在冒号旁边。选择能让表达式易于浏览的续行缩进,并在文件中一致地使用相同的模式。
将布尔运算符放在续行之前
PEP 8 建议在二元运算符之前断行,这样 and 或 or 会位于下一续行的开头。这使得每个附加检查都易于发现。这种放置是一种格式选择:括号和换行不会改变 Python 对表达式的分组方式,也不会改变 and 和 or 的短路方式。请参阅 PEP 8 关于多行 if 语句的指南。
下面是一个包含三个检查的紧凑示例。主体属于 if;括号内的缩进有助于读者浏览表达式。
plan = {"active": True, "paid": True, "seats": 4}
if (
plan["active"]
and plan["paid"]
and plan["seats"] >= 3
):
print("Eligible for the team plan.")
else:
print("Choose another plan.")
使用所示的值,三个检查都为真,因此程序会打印:
Eligible for the team plan.
对于混合逻辑,使用括号使预期的分组可见,例如 (is_member or has_invitation) and account_is_active。如果前面的检查应该保护后面的检查,请保持该顺序:and 和 or 以短路行为从左到右求值。仅凭格式并不能使不同的分组等效。
仅在需要时使用反斜杠
反斜杠可以显式地延续一条语句,但它比括号更脆弱。该标记必须是其物理行上的最后一个字符;其后的尾随空格或后续编辑都可能破坏延续。例如,一行可以在下一个条件之前以 if account_is_active and \ 结尾。对于长条件,优先使用括号,因为它们避免了这种对行尾的依赖,并允许自然的缩进。将反斜杠保留给周围语法不提供隐式续行上下文的情况。
当命名能提高清晰度时为条件命名
当一个条件本身具有有用的含义或会被重复使用时,将其赋给一个描述性名称,例如 eligible_for_team_plan,然后编写 if eligible_for_team_plan:。这为 if 语句提供了一个简洁、有意义的测试,并可以使周围的控制流更易于阅读。在赋值和使用该名称的所有地方都保持一致。
命名变量是一种风格选择,不是一条反对重构的规则。对于只使用一次的短表达式,将带括号的条件放在 if 旁边可能更清晰;对于更长或重复使用的规则,名称可能更好地传达意图。遵循项目的惯例,选择能让另一位开发者最容易理解该决策的形式。