白癜风北京专家 https://jbk.39.net/yiyuanzaixian/bjzkbdfyy/jzpj/背景
在C/C++语言中,对于使用三目运算符“?:”的条件表达式:
a?b:c
其含义是:当a为真时,表达式的值是b,当a为假时,表达式的值是c。
下面考虑一下在Python语言中怎么用一行代码实现等价的方式,这儿介绍两种实现方法。
第1种方式:使用“...and...or...”实现
这种方法使用Python里面的andor操作符实现,方式如下:
aandborc
原因是,在Python里面,and和or操作符执行布尔逻辑运算,但它们返回的并不是布尔值,而是返回的它们实际进行比较的值之一。具体说明如下:
对于两个数的and操作符比较,从左到右扫描,返回第一个为假的表达式值,无假值则返回最后一个表达式值;对于两个数的or操作符比较,从左到右扫描,返回第一个为真的表达式值,无真值则返回最后一个表达式值。
当同时使用andor连接成“aandborc”时,分析如下:
若a为真,aandb则为b,进一步化简为borc,由于b为真,则最终返回b的值;
若a为假,aandb则为a,进一步化简为aorc,由于a为假,则最终返回c的值。
例如,对于下面两个表达式:
Trueand‘b’or‘c’
Falseand‘b’or‘c’
则分别返回值为’b’和’c’。
注意,对于表达式“aandborc”,上面的分析是基于b在逻辑值上都为True的情况才成立。我们知道,在Python语言中,0、、[]、()、{}、None的逻辑值都为假,若b的值为这些值时,若a为True时,aandb则为b,进一步化简为borc,由于b的逻辑值为假,则最终返回的是c的值,所以此时与C/C++语言中的条件运算符不等价了。为避免这种情况的发生,可以将b和c的值放在列表里,如变成[0],此时逻辑值为True,那么上面的表达式改进为如下形式就可以了:
(aandor[c])[0]
上面形式中,把a为假的可能性完全排除掉,然后通过索引[0]再获得,这儿因为要通过[0]获得元素,所以b也要加上[]。
例如,若b=0,c=,对于下面两个表达式:
(Trueandor[c])[0]
(Falseandor[c])[0]
则可以正确返回0和了。
第2种方式:使用“...if...else...”实现
这种方法使用Python里面的ifelse实现,方式如下:
bifaelsec
这种方式相对于第1种方法要简单的多,可以完美实现C/C++语言中的条件运算符。
例如,若b=0,c=,对于下面的两个表达式:
0ifTrueelse’
0ifFlaseelse’
则分别可以返回0和。
备注
完整的测试代码如下图所示:
运行结果如下:
欢迎加