Python有问号表达式吗?三元运算符这样用才地道!

吉云

今天我来唠唠这个所谓的“问号表达式”。我一开始也是在看别人写的代码,好像是别的语言,里面有那种 `条件 ? 值1 : 值2` 的写法,看着挺简洁的。我就寻思着Python里有没有这玩意儿,能不能也这么写,省点代码行数。

于是我就动手试试。打开我的编辑器,随便写个变量,比如 `a = 10`,然后就想,要是 `a` 大于5,就让变量 `result` 等于 'yes',不然就等于 'no'。我试着模仿那个格式写:

result = a > 5 ? 'yes' : 'no'

Python有问号表达式吗?三元运算符这样用才地道!

得,运行一下,Python直接给我报错,说这语法不对。当时我就有点纳闷,难道Python不支持这种简洁的写法吗?

不甘心,我就去查查资料。一查才知道,Python确实没有那个问号冒号 `? :` 的写法,但是它有一个类似的东西,实现同样的效果,不过格式不太一样。它是这么写的:

值1 if 条件 else 值2

你看,这个顺序跟别的语言有点反过来,它是先把满足条件的结果放前面,然后是 `if 条件`,是 `else` 和不满足条件的结果。

开始动手试试

知道这个语法,我赶紧就去改我的代码。刚才那个例子,用Python的这个写法就变成:

Python有问号表达式吗?三元运算符这样用才地道!

a = 10

result = 'yes' if a > 5 else 'no'

然后我 `print(result)` 一下,这回对,输出 'yes'。我又把 `a` 改成 3,再运行,输出 'no'。成!

为加深印象,我又多试几个例子。

比如,判断一个数是奇数还是偶数:

num = 7

Python有问号表达式吗?三元运算符这样用才地道!

type_str = '偶数' if num % 2 == 0 else '奇数'

运行结果 `type_str` 就是 '奇数',也没问题。

我还试试直接用在 `print` 里面,不先赋值给变量:

age = 22

print('可以投票' if age >= 18 else '还不能投票')

这也行,直接输出 '可以投票'。

Python有问号表达式吗?三元运算符这样用才地道!

用起来的感受

刚开始用的时候,感觉这个 `值1 if 条件 else 值2` 的顺序有点反直觉,不像 `if...else...` 语句那么自然。我总得想一下,哪个值是条件为真时的,哪个是条件为假时的。

但是,多写几次之后,慢慢就习惯。对于这种简单的二选一赋值或者返回值的场景,用这个写法确实能让代码变得很短,一行就能搞定原来需要三四行的 `if-else` 结构。

  • 优点:代码简洁,尤其是给变量赋二选一的值时。
  • 缺点:刚开始可能有点不习惯顺序;如果条件或者返回值逻辑太复杂,写在一行里可能会降低可读性,那时候还不如老老实实写 `if-else` 块。
  • Python有问号表达式吗?三元运算符这样用才地道!

这回实践下来,我算是弄明白Python里怎么实现类似“问号表达式”的功能。虽然它不叫问号表达式,也没用问号,但效果是一样的,就是Python自己的三元运算符或者叫条件表达式。以后写代码,遇到合适的简单场景,我肯定会用它来让代码更紧凑点。

这就是我今天折腾这个“问号表达式”(或者说Python条件表达式)的过程和一点记录,分享给大家。

免责声明:由于无法甄别是否为投稿用户创作以及文章的准确性,本站尊重并保护知识产权,根据《信息网络传播权保护条例》,如我们转载的作品侵犯了您的权利,请您通知我们,请将本侵权页面网址发送邮件到qingge@88.com,深感抱歉,我们会做删除处理。

目录[+]