0
Posted on 11:24:00 by Unknown and filed under

本文在 github 中的镜像:Python 的 and-or 技巧

布尔上下文

在 Python 中,可以在布尔上下文中使用几乎所有类型的表达式。通常的数据类型的“空值”都为 False。

  • None 为假值
  • 数值 00.0 等为假值
  • 空串 "" 为假值
  • 空列表 [] 为假值
  • 空元组 () 为假值
  • ...

逻辑演算

在 Python 中,and 和 or 按照下面的规则执行布尔逻辑演算:

对于 and,从左到右运算:

  • 如果所有表达式都为真,则 and 返回最后一个表达式。
  • 否则,and 返回第一个假值。

对于 or,从左到右运算:

  • 如果有一个为真,则 or 立刻返回该值。
  • 否则,or 返回最后一个表达式。
  • or 找到第一个真值后会忽略计算剩余的表达式。

注意到:返回的并不是布尔值,而是其中某个参与比较的表达式值。

and-or 技巧

在 C 中,表达式 bool ? a : b 表示当 bool 为真时结果为 a,其它值则为 b。在 Python 中可以使用 and-or 实现类似的功能。

 
((test and [x]) or [y])[0]

在这个 Python 表达式中,如果 test 为真,则返回 x,否则返回 y。

这里使用列表将 x 和 y 括起来是为了防止 x 为空值的情况,比如想要实现:“如果 test 为真,则取 0,如果 test 为假,则取 1”,如果不将 0 括起来则为:

 
(test and 0) or 1

不论 test 是真是假,都只会返回 1。

0
评论 : Python 的 and-or 技巧

发表评论