Contents
语法
and-or Trick
C 语言里面有一个非常方便的表达式 bool ? a : b
,在 Python 里面可以耍点
小把戏来实现同样的功能:
语法和 C 的那个表达式非常像。整个表达式按照从左到右的顺序进行求值(而不
是像 C 那样 &&
比 ||
有更高的优先级)。因此 1 and a
得到 a
,而 a or b
得到 a
也就是 'first'
,后者同样, 0 and a
得到 0
,而 0 or b
得到 b
也就是 'second'
。不过这个 Trick 还有一个 bug ,看下面这个例子:
因为现在 1 and a
虽然是得到了 a
,但是 a
是空字符串,在 Python 里面被
视为假,于是 a or b
就得到了 a
,这违背了我们本来的意愿。不过也有一个
办法来解决这个问题,那就是用方括号把 a
和 b
包围起来,让他们成为一个非
空列表,而非空列表永远都不会为假,也就不会出现刚才那种情况了:
但是这样语法就显得稍微复杂了,但是有时候,比如你在两个已知的常量之间选 择的时候,如果两者都是已知非假的,就可以直接使用简单的形式,即使是复杂 形式,也是很有用的,像有时候(比如,在 lambda 函数里面) Python 不允许 if 语句的出现,这个就有用武之地了。