类似于C语言中的condition? resultIfTrue:resultIfFalse
Python有类似的语法resultIfTrue if condition else resultIfFalse
但Python中早期没有类似写法的三目运算符, 所以就出现了一种利用短路逻辑, 用and和or来模拟三目运算符的写法, 例如:
result=x<y and x or y
注意在Python中and的优先级是大于or的,而且and和or都是会返回值的并且不转换为True和False。所以首先判断条件x小于y的真假,如果为真and会返回x;如果为假,and返回False,然后计算False or y一定是返回y的。看似这种写法没有问题,实际上有一个逻辑漏洞,就是当x小于y为真且x==0时返回的x为0(这是我期望得到的result的值),但是0 or y在y!=0时返回y的值,实际得到的result不为0。
一个正确的模拟写法是
result=(x<y and [x] or [y])[0]