HOWTO · Python
Python 中如何在一行编写多个 `if` 语句
本教程说明如何在 Python 中用分号在一行上分隔多个简单语句、用条件表达式选择一个值,以及用 `any()` 检查是否至少有一项为真;需要处理多个分支时,应使用多行 `if`/`elif`/`else` 代码块。
本页内容
Python 可以用分号在同一物理行上分隔多个简单语句,但 if 属于复合语句,不能像另一个语句那样接在分号后面形成一串 if。需要处理多个分支时,应使用常规的 if/elif/else 代码块。条件表达式可以在一行中选择一个值;any() 则用于回答另一个问题:可迭代对象中是否至少有一项为真。
简短的一行表达式有时很实用,但把分支逻辑塞进嵌套表达式,往往会让执行顺序和结果更难理解。下面的示例会区分这些写法,帮助你根据任务选择合适的形式。
在 Python 中的一行上编写多个 if 语句
分号可以分隔简单语句,例如 first = 1; second = 2。但它不会把复合的 if 语句变成简单语句:在同一物理行上写 if ready: start(); if finished: stop() 并不是有效的 Python 语法。一个 if 分支体中可以包含用分号分隔的简单语句,例如 if ready: start(); log_status(),但这通常不如把每个操作分别写在缩进的行中清晰。
如果要检查多个备选条件并执行不同操作,请写成 if/elif/else 代码块。Python 会按顺序检查条件,并且只执行第一个为真的条件所对应的分支体。规则或操作发生变化时,这种代码块也更容易扩展。
使用条件表达式选择一个值
条件表达式的形式为 value_if_true if condition else value_if_false。它是一种表达式,会产生一个值;这个值可以赋给变量、作为返回值,或传给函数。它不会创建多个 if 语句,也不会执行多个独立的分支体。
例如,label = "adult" if age >= 18 else "minor" 会在两个字符串中选择一个。若要在三个结果中选择,也可以嵌套条件表达式:label = "low" if score < 50 else "pass" if score < 80 else "high"。从左向右理解嵌套:如果第一个条件为假,Python 就会计算下一个条件表达式。只有在各个选项仍然容易辨认时才使用这种写法;有多个嵌套条件时,多行分支代码块通常更清楚。
使用 any() 检查条件是否为真
内置函数 any() 在可迭代对象中至少有一项为真值时返回 True;如果没有任何一项为真值,则返回 False。例如,any(score >= limit for limit in (50, 80)) 会检查分数是否达到其中至少一个门槛。生成器表达式会逐项提供布尔结果,any() 找到真值后便会停止检查。
当你只需要一个是或否的结果时,可以使用 any()。它不会指出哪个条件匹配,也不会选择相应的消息。如果每个条件都需要对应的结果或操作,请改用 if/elif/else。如果生成器表达式可以直接提供布尔检查结果,就没有必要先用列表推导式创建列表再传给 any()。
多个分支优先使用多行 if/elif/else 代码块
当 a = 2、b = 3 时,下面的代码块会输出符合条件的关系。
a = 2
b = 3
if a < b:
print("a is less than b")
elif a == b:
print("a is equal to b")
else:
print("a is greater than b")
a is less than b
if 和 elif 条件会按顺序检查。由于这些值满足 a < b,第一个分支体会输出相应消息,其余分支都会跳过。最后的 else 会处理其他所有关系,包括 a > b。
需要选择一个简单的值时,可以用条件表达式;只想知道可迭代对象中是否有真值时,可以用 any()。如果要执行多个操作或处理几种不同结果,多行代码块能明确展示分支顺序和行为。分号虽然能分隔简单语句,但不能让一串复合 if 语句成为合适的单行写法。