`
黑鸟酱
  • 浏览: 127234 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

Python三目运算,and or陷阱

 
阅读更多

在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中实现三目运算的方法

    由于Python没有直接支持三目运算符的语法,我们可以利用`and`和`or`这两个逻辑运算符来模拟实现三目运算符的功能。 ### 方法一:使用`and`与`or`运算符 在Python中,我们可以通过组合使用`and`和`or`运算符来实现...

    三目运算与if-else的区别

    JS中三目运算符和if else的区别分析与示例

    0400-极智开发-解读python 三目运算符

    0400_极智开发_解读python 三目运算符

    使用Python的判断语句模拟三目运算

    另一方面,Python中的逻辑运算符and和or也与三目运算有些相似之处。在Python中,and运算符的行为是:如果所有值都为真,则返回最后一个真值;如果有一个假值,则返回第一个假值。而or运算符的行为是:如果有一个值为...

    JS三目运算(三元运算)方法详解

    1、什么是三目运算:(布尔表达式 ? 值0:值1;) 5>3?alert(‘5大’):alert(‘3大’); 即 if(5>3){alert(‘5大’)}else{alert(‘3大’)}; 注意:三目运算和if(){}else{}的 区别是三目...

    三目运算法则

    ### 三目运算法则 #### 一、概述 三目运算法则,又称为条件运算符或三元运算符,在编程语言中是一种简洁而高效的条件判断方式。它由三个操作数组成,因此得名“三目”运算。在很多编程语言中(如Java、C/C++等)均...

    三目运算符+正则表达式

    在编程世界中,三目运算符和正则表达式是两个非常重要的概念,它们各自扮演着独特的角色,同时也常被结合起来使用,以提高代码的简洁性和效率。让我们深入探讨这两个主题。 首先,三目运算符,也称为条件运算符,是...

    Java三目运算中隐藏的自动拆装箱

    Java三目运算中隐藏的自动拆装箱 Java三目运算符是一种常用的编程结构,但是在使用时需要注意一些隐藏的自动拆装箱问题。本文将详细介绍Java三目运算中隐藏的自动拆装箱,并通过实例代码来讲解这个问题。 在Java中...

    判断语句--三目运算符练习示例

    在编程领域,三目运算符是一种简洁而高效的条件判断表达方式,主要应用于C、C++、Java、Python等编程语言中。它以一种紧凑的形式替代了传统的if-else语句,使得代码更加简洁易读。本资源提供的"三目运算符"练习示例...

    浅谈Java三目运算

    如果 `x` 的计算结果为 `true`,那么整个三目运算的结果是 `y` 的值;相反,如果 `x` 为 `false`,则结果是 `z` 的值。 例如,我们来看一个简单的示例: ```java String s = ""; String x = "默认值"; s = s....

    python-三目运算符.pdf

    ### Python中的三目运算符详解 #### 一、引言 在编程过程中,经常会遇到根据某个条件选择执行不同代码逻辑的需求。Python作为一种简洁高效的编程语言,提供了多种方式来实现这样的功能,其中之一就是所谓的“三目...

    python关键字and和or用法实例

    python 中的and从左到右计算表达式,若所有值均为真,则返回最后一个值,若存在假,返回第一个假值。 or也是从左到有计算表达式,返回第一个为真的值。 复制代码 代码如下: IDLE 1.2.4 >>>’a’and’b’ ‘b’ >>>”...

    Python中的三目(元)运算符详解

    在传统的三目运算符中,如 C 语言,表达式 `a > c ? a : c` 会根据条件 `a > c` 的真假来决定结果是 `a` 还是 `c`。如果条件为真,计算并返回 `a` 的值;否则,计算并返回 `c` 的值。而 Python 中的等价形式是 `max...

    C语言中的三目运算符

    三目运算符的实例 。

    通过实例解析python and和or使用方法

    在python中and和or返回的值并不是True和false这么简单。虽然他们看上去和c++中的&&和||有些相似。在了解and和or之前,我们先要了解python中的True和False。 在python里面,0、”、[]、()、{}、None为假,其它任何...

    Python and、or以及and-or语法总结

    Python中的`and`、`or`以及`and-or`语法是编程中常见的逻辑操作符,它们用于处理布尔逻辑。在Python中,这些操作符不仅返回布尔值,还可能返回参与运算的实际值。以下是对这些语法的详细解释: 1. **and**: `and`...

    浅谈python为什么不需要三目运算符和switch

    在Python 2.5之前,由于条件表达式尚未引入,开发者可以使用逻辑操作符`and`和`or`达到相同的效果,如`x < 5 and 1 or 0`。这种方式虽然略显冗长,但在旧版本Python中是有效的。 接下来,我们讨论switch语句。在C、...

Global site tag (gtag.js) - Google Analytics