专栏首页python3Python3 三目运算符

Python3 三目运算符

Python 中没有像 C 语言中一样直接使用 x?a:b 这样的三元表达式,但是它有两种替代方法:

方法一

a if x else b

如果 x 为 True,返回 a;否则返回 b

>>> 'True' if 2 > 1 else 'False'
'True'
>>> 'True' if 2 < 1 else 'False'
'False'
>>> 

方法二

利用 and or 短路运算的特点

and 运算时,例如 a and b,如果 a 为 False 就不再判断b的值。

or运算时,例如 a or b,如果 a 为 True 就不再判断 b 的值。

假设表达式为:x and a or b。如果 x 为 True,会接着判断 a,如果 a 等同True,就返回 a 的值。

如果 a 等同 False,就计算 b,返回 b 的值。如果你觉得有点绕,直接看下面的例子:

>>> 2 > 1 and 'True' or 'False'
'True'
>>> 2 < 1 and 'True' or 'False'
'False'

但这种方法有个坑,如果 a 为 "",即空串,对它作真假值判断时会返回 False,与我们的假设不符。

>>> 2 > 1 and '' or 'False'
'False'

这种方法看起来挺优雅,看在它优雅的份上,能不能补救一下呢?

当然,机智的网友找到了修补的方法,那就是把 a 和 b 用列表包起来。因为即使包含空串元素的列表,其表达式依然等同 True

上面的例子包裹后变成下面这幅德行:

>>> (2 > 1 and [''] or ['False'])[0]
''
>>> 2 > 1 and [''] or ['False']
['']

可以看到,这种方法是多么地丑陋。构造了两个列表不说,最后还得依赖下标运算把想要的值取出来。

所以推荐使用第一种方法。比较好理解,也没有坑。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python中的一些基础: 真值表

    为了便于看清,我用<=>来表示等价关系。 <=>左边表示逻辑表达式,<=>右边表示它的结果。

    py3study
  • Python中运算符not、and、or

    py3study
  • python - 基础类型 - bool

    1.在数值上下文环境中,True被当作1,False被当作0,例如 True+3=>4

    py3study
  • 第十一节、Python中布尔类型《Python学习》

    我们已经了解了Python支持布尔类型的数据,布尔类型只有True和False两种值,但是布尔类型有以下几种运算:

    申霖
  • 刷题翻车:python 布尔运算操作符的优先级

    前两天在 xue.cn 体验答题挑战,我有道题做错了,却不明白错在哪里。题目大概如下,代码运行后将打印什么?

    刘娟娟PRESSone
  • 有趣的 Python 特性 4 | 碰到这种「链式」操作就要小心了。

    Python 提供了很多让使用者觉得舒服至极的功能特性,但是随着不断的深入学习和使用 Python,我发现其中存在着许多玄学的输出与之前预想的结果大相径庭,这个...

    Rocky0429
  • Python中的一些基础: 真值表

    为了便于看清,我用<=>来表示等价关系。 <=>左边表示逻辑表达式,<=>右边表示它的结果。

    py3study
  • 真值表

    逻辑判断是编程中极为常用的知识。之前的课我们已经说过,见第6课和第11课。但鉴于逻辑运算的重要性,今天我再把常用的运算结果总结一下,供大家参考。 这种被称为“真...

    Crossin先生
  • Python之33个关键字详解

    x or y     如果 x 为 False、 空、0,返回  y,否则返回x

    py3study
  • JavaScript 实现接口 (Interfaces In JavaScript)

    接口是面向对象编程里的重要特性,遗憾的是JavaScript并没有提供对接口的支持!怎么实现接口呢? 在实际中,我们可以在注释中定义好接口,在实际的代码中予以实...

    用户1177380

扫码关注云+社区

领取腾讯云代金券