打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Python语言编程系列012——一行代码实现条件表达式的实现方法

背景

C/C++语言中,对于使用三目运算符“?:”的条件表达式:

a ? b c

其含义是:当a为真时,表达式的值是b,当a为假时,表达式的值是c

下面考虑一下在Python语言中怎么用一行代码实现等价的方式,这儿介绍两种实现方法。

1种方式:使用“... and ... or ...”实现

这种方法使用Python里面的and or操作符实现,方式如下:

a and b or c

原因是,在Python里面,andor操作符执行布尔逻辑运算,但它们返回的并不是布尔值,而是返回的它们实际进行比较的值之一。具体说明如下:

对于两个数的and操作符比较,从左到右扫描,返回第一个为假的表达式值,无假值则返回最后一个表达式值;

对于两个数的or操作符比较,从左到右扫描,返回第一个为真的表达式值,无真值则返回最后一个表达式值

当同时使用and or连接成“a and b or c”时,分析如下:

a为真,a and b则为b,进一步化简为b or c,由于b为真,则最终返回b的值;

a为假,a and b则为a,进一步化简为a or c,由于a为假,则最终返回c的值。

例如,对于下面两个表达式:

True and b or c

False and b or c

则分别返回值为bc

注意,对于表达式a and b or c”,上面的分析是基于b在逻辑值上都为True的情况才成立。我们知道,在Python语言中,0、''、[]、()、{}、None的逻辑值都为b的值为这些值时,若aTrue时,a and b则为b,进一步化简为b or c,由于b的逻辑值为假,则最终返回的是c的值,所以此时与C/C++语言中的条件运算符不等价了。为避免这种情况的发生,可以将bc的值放在列表里,如变成[0],此时逻辑值为True,那么上面的表达式改进为如下形式就可以了:

(a and [b] or [c])[0]

上面形式中,a为假的可能性完全排除掉,然后通过索引[0]再获得这儿因为要通过[0]获得元素,所以b也加上[]

例如,若b=0c=123,对于下面两个表达式:

(True and [b] or [c])[0]

(False and [b] or [c])[0]

则可以正确的返回0123了。

2种方式:使用“...if ... else ...”实现

这种方法使用Python里面的if else实现,方式如下:

b if a else c

这种方式相对于第1种方法要简单的多,可以完美实现C/C++语言中的条件运算符。

例如,若b=0c=123,对于下面的两个表达式:

0 if True else 123

0 if Flase else 123

则分别可以返回0123

 

备注

完整的测试代码如下图所示:

 

  

运行结果如下:

 

  

 

欢迎加关注,共同交流。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
python中 and 和 or 运算的核心思想
2.5. 运算符与表达式 |《Python 简明教程 2018》| Python 技术论坛
Python重构(二)
Python 世界的黑客帝国
1.4 操作符/运算符(Operators)
Swift教程之基本运算符详解
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服