Menu

Python if、elif、else:条件语句与三元表达式

Python 的 if、elif 和 else 语句是怎么工作的:包括真值、嵌套条件和三元 if 表达式。

本页包含可运行的编辑器。编辑、运行,立即查看输出。

像英语一样的决策

if 是大多数程序最先用到的工具。它让你的代码在条件为真时走一条路,不为真时走另一条路。Python 的写法非常直接:

两行代码,一个决策。if 这一行以冒号结尾。下面缩进的那一行是 if 的代码体,也就是条件为真时运行的代码。如果 hour 是 15,代码体会被整个跳过,什么也不会打印。

在这里,缩进就是结构。Python 通过每行开头的空白来判断哪些行属于 if。惯例是每一层缩进四个空格;保持一致就好。

加上 else 分支

很多时候你希望无论如何都发生点什么:条件为真时做这件事,否则做那件事。这就要用 else:

else 这一行没有条件,它会接住 if 没有处理的所有情况。

用 elif 实现多个分支

需要两条以上的路径时,在 if 和 else 之间叠加 elif(“else if”)子句:

Python 从上到下检查各个条件,运行第一个为真的条件对应的代码块,其余的都会被跳过。这个从上到下的顺序很重要:如果你把 score >= 60 放在 score >= 90 前面,所有人都会得到 D,因为第一个为真的条件胜出。

一个值得记住的整洁结构:对于任意给定的输入,各个条件应该互斥,顺序也应该反映你思考问题的自然方式。最具体的情况放在前面,最笼统的放在最后。

条件中的真值

if 中的表达式不一定要求值为字面量 True 或 False。Python 接受任何值,并判断它的真值:

if items: 读作“如果列表里有东西”。假值包括:

  • False
  • 0、0.0
  • None
  • 空容器:""、[]、{}、set()、()

其他所有值都是真值。利用真值判断能让代码读起来更自然,但有一点要注意:如果零是一个有意义的值(比如一个本来就可能为零的计数器),就用 is not None 或 != 0 显式比较,避免把“空”和“零”混为一谈。

组合条件

and、or 和 not 可以用来构建复合条件:

当两端共享同一个中间值时,链式比较比显式的 and 更简洁:

这和 18 <= age and age < 65 一样,但读起来就像一个数学不等式。

嵌套的 if 语句

你可以在 if 里面再放 if。这是合法的,有时也是最清晰的结构,但它也是条件代码变得难以理解的主要原因。如果你发现自己已经嵌套了三层,可以考虑用提前返回(等你开始写函数时)或合并条件的方式把代码拉平:

两种写法都能运行。选择对一个从没看过这段代码的读者来说更好读的那个。

三元表达式

当你只想根据一个条件让某个值在两者之间二选一时,Python 有一种紧凑的写法:

从左往右读:“如果 temp 至少是 70,就是 warm,否则是 cool。”它非常适合简短的二选一赋值。一旦分支变长或包含多个操作,就别再用它了,这时完整的 if/else 代码块看起来更轻松。

if 只在一个地方是表达式

和某些语言不同,Python 的 if 语句本身不会产生值,只有三元形式才会。你不能像在 Rust 或 Kotlin 中那样写 x = if ...:。如果你想要一个条件值,就用三元表达式;如果你想要条件行为,就用完整的 if 代码块。

一个完整的小例子

一个对温度进行分类的小程序:

注意,这段逻辑主要只是在决定 advice 应该是什么。你一眼就能看出哪个温度范围对应哪条消息。这正是你写条件语句时应该追求的样子:每个分支都很小,整体意图一目了然。

接下来

条件让代码选择一条路径,循环让代码重复执行。下一篇:for 循环,它是 Python 中用得最多的循环,也是你在后面几页会遇到的各种容器类型的天然搭档。

常见问题

Python 中的 if 语句是怎么工作的?

if condition: 后面跟一个缩进的代码块,只有条件为真时才会运行这个代码块。可选的 elif(else if)子句让你检查更多条件,可选的 else 在其他条件都不满足时运行。

Python 有 switch 语句吗?

Python 3.10 加入了用于结构化模式匹配的 match/case,它能覆盖 switch 语句的大多数用法,而且功能更多。对于简单的分支,一串 if/elif 仍然很常见,也完全没问题。

Python 中的三元 if 是什么?

一种单行的条件表达式:result = a if condition else b。从左往右读:condition 为真时求值 a,否则求值 b。用来写简短的二选一赋值很方便;分支一长,可读性就会下降。

Coddy 编程语言插图

和 Coddy 一起学编程

开始