Python三目运算符和用短路逻辑对其进行的模拟写法

类似于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]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值