在C语言中,三目运算经常用到(cond?a:b),非常的简洁,而在Python中不支持这种语法。
但是,可以用Python中and or来实现(这里是有陷阱的,下面会讲到)
我们来看下面几个表达式
>>> False or 1
1
>>> False or 0
0
>>> True or 0
True
>>> True and 1
1
>>>True and 0
0
>>> False and 1
False
也就是说,and or这个表达式会返回一个最终的表达式结果,而不是简单的True或者False。那么看如下几个表达式:
>>> True and 1 or 2 #TRUE?1:2
1
>>> False and 1 or 2 #TRUE?1:2
2
这是不是很像三目运算的结果呢?
这里你也许会想到文章开始的三目表达式可以这样表示
>>> cond and a or b
是的,在大多数情况下这个表达式都是正确的,但是上面提到的陷阱也在这里出现了
>>> cond, a, b = True, 0, 1 #这样赋值后
>>> cond and a or b #这个表达式的结果会是什么呢?
1 #也就是b,而不是你预想的a
这是因为,在 and or运算中 空字符串 ‘’,数字0,空列表[],空字典{},空(),None,在逻辑运算中都被当作假来处理,如下面这个例子
>>> 'sss' and '' or 'bbb'
'bbb'
但是,不要担心,还是有办法的。
在的文章《和C语言三目运算符完全等价的表达式
》中给出了如下表达方式
>>> c = cond and a or (not cond or a) or b #貌似有点太复杂了
在Dive into Python 中给出这样一个方法:
>>> (1 and [a] or [b])[0] #也就是 (cond and [a] or [b])[0]
因为,即使 a或者b为一个逻辑假的值,将他放入集合中后,就为假了,也就是[False] [None]都不为假。
此外,我认为还可以这样实现
>>> (b, a)[cond and 1 or 0] #这种方法需要主意的地方就是,Tuble中a和b的位置是颠倒的
另,在“深圳夜归人”的文章
里给出了,用dict的一种方式
>>> max_ab = {True:a, False:b}[a > b]
但是这种方法没有普适性,因为cond的取值不一定为True False
所以建议使用Dive into Python的方法,或者我的方法
分享到:
相关推荐
主要介绍了Python中实现三目运算的方法,本文用and/or运算符模拟实现三目运算,需要的朋友可以参考下
JS中三目运算符和if else的区别分析与示例
下面说的和三目运算有点相似,但又不一样,实在不知道该如何拟定标题,先就是这个标题吧,大家都知道python中没有三目运算,但是and/or有点类似三目运算: and/or 单独使用表示逻辑关系与和或,也可以组和使用,用法如下 and...
三目运算法则
1、什么是三目运算:(布尔表达式 ? 值0:值1;) 5>3?alert(‘5大’):alert(‘3大’); 即 if(5>3){alert(‘5大’)}else{alert(‘3大’)}; 注意:三目运算和if(){}else{}的 区别是三目...
本文给大家主要介绍的是java中三目运算的详细介绍,并附上2个示例,希望对大家理解三目运算能够有所帮助。
python python_三目运算符
(word文件),让你更好的理解三目表达式和正则表达式
主要介绍了Java三目运算中隐藏的自动拆装箱,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
python 中的and从左到右计算表达式,若所有值均为真,则返回最后一个值,若存在假,返回第一个假值。 or也是从左到有计算表达式,返回第一个为真的值。 复制代码 代码如下: IDLE 1.2.4 >>>’a’and’b’ ‘b’ >>>”...
三目运算符的实例 。
在python中and和or返回的值并不是True和false这么简单。虽然他们看上去和c++中的&&和||有些相似。在了解and和or之前,我们先要了解python中的True和False。 在python里面,0、”、[]、()、{}、None为假,其它任何...
c代码-递归法求最大值(三目运算)
主要介绍了JS switch判断 三目运算 while 及 属性操作代码,需要的朋友可以参考下
这篇文章主要介绍了Python三元运算与lambda表达式实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 三元运算是if…else…的简化版,lambda表达式是函数...