>>> a = "first" >>> b = "second" >>> 1 and a or b (1) 'first' 这个语法看起来类似于 C 语言中的 语言中的 语言中的 bool ? a : b 表达式。 整个从左到 右计算, 所以先and 表达式 。 1 and 'first' 值为 'first', 然后 'first' or 'second' 的值为 'first'。
>>> 0 and a or b (2) 'second' 0 and 'first' 值为 False,然后 0 or 'second' 值为 'second'
>>> a = "" >>> b = "second" >>> 1 and a or b 'second' 像这样的 and 后面的 a 是一个假值,最后返回的是 b 值,并不是我们期望的效果。(我们期望是 and前面的值的真假 来控制 最后返回是 or 左边 还是 or 右边的值,真的情况返回左边的值,假的情况返回右边的值。)
processFunc = collapse and (lambda s: " ".join(s.split())) or (lambda s: s) 像这样的,and后面哪个表达式是一个lambda,不会是假的,这样就可以通过 collapse变量的真假来 决定最后返回的是 or哪边的lambda表达式。
这种方式就是把一个判断从一个函数中摘取出来,通过这个判断来决定使用哪个函数,这样更为高效。
1 2 3 4 5 6 7 8 9 10
>>> a = "" >>> b = "second" >>> (1 and [a] or [b])[0] (1) '' 这里我们可以采用列表来强制的把or两边的值都设置成真值。这样我们可以根据 and 前面的值 来决定 最后表达式的值拉。