今天我来唠唠这个所谓的“问号表达式”。我一开始也是在看别人写的代码,好像是别的语言,里面有那种 `条件 ? 值1 : 值2` 的写法,看着挺简洁的。我就寻思着Python里有没有这玩意儿,能不能也这么写,省点代码行数。
于是我就动手试试。打开我的编辑器,随便写个变量,比如 `a = 10`,然后就想,要是 `a` 大于5,就让变量 `result` 等于 'yes',不然就等于 'no'。我试着模仿那个格式写:
result = a > 5 ? 'yes' : 'no'
得,运行一下,Python直接给我报错,说这语法不对。当时我就有点纳闷,难道Python不支持这种简洁的写法吗?
不甘心,我就去查查资料。一查才知道,Python确实没有那个问号冒号 `? :` 的写法,但是它有一个类似的东西,实现同样的效果,不过格式不太一样。它是这么写的:
值1 if 条件 else 值2
你看,这个顺序跟别的语言有点反过来,它是先把满足条件的结果放前面,然后是 `if 条件`,是 `else` 和不满足条件的结果。
开始动手试试
知道这个语法,我赶紧就去改我的代码。刚才那个例子,用Python的这个写法就变成:
a = 10
result = 'yes' if a > 5 else 'no'
然后我 `print(result)` 一下,这回对,输出 'yes'。我又把 `a` 改成 3,再运行,输出 'no'。成!
为加深印象,我又多试几个例子。
比如,判断一个数是奇数还是偶数:
num = 7
type_str = '偶数' if num % 2 == 0 else '奇数'
运行结果 `type_str` 就是 '奇数',也没问题。
我还试试直接用在 `print` 里面,不先赋值给变量:
age = 22
print('可以投票' if age >= 18 else '还不能投票')
这也行,直接输出 '可以投票'。
用起来的感受
刚开始用的时候,感觉这个 `值1 if 条件 else 值2` 的顺序有点反直觉,不像 `if...else...` 语句那么自然。我总得想一下,哪个值是条件为真时的,哪个是条件为假时的。
但是,多写几次之后,慢慢就习惯。对于这种简单的二选一赋值或者返回值的场景,用这个写法确实能让代码变得很短,一行就能搞定原来需要三四行的 `if-else` 结构。
- 优点:代码简洁,尤其是给变量赋二选一的值时。
- 缺点:刚开始可能有点不习惯顺序;如果条件或者返回值逻辑太复杂,写在一行里可能会降低可读性,那时候还不如老老实实写 `if-else` 块。
这回实践下来,我算是弄明白Python里怎么实现类似“问号表达式”的功能。虽然它不叫问号表达式,也没用问号,但效果是一样的,就是Python自己的三元运算符或者叫条件表达式。以后写代码,遇到合适的简单场景,我肯定会用它来让代码更紧凑点。
这就是我今天折腾这个“问号表达式”(或者说Python条件表达式)的过程和一点记录,分享给大家。