Python 笔记

语法

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 ,这违背了我们本来的意愿。不过也有一个 办法来解决这个问题,那就是用方括号把 ab 包围起来,让他们成为一个非 空列表,而非空列表永远都不会为假,也就不会出现刚才那种情况了:

但是这样语法就显得稍微复杂了,但是有时候,比如你在两个已知的常量之间选 择的时候,如果两者都是已知非假的,就可以直接使用简单的形式,即使是复杂 形式,也是很有用的,像有时候(比如,在 lambda 函数里面) Python 不允许 if 语句的出现,这个就有用武之地了。