`
tudusi
  • 浏览: 1079351 次
文章分类
社区版块
存档分类
最新评论

【Python】Python三目运算,and or陷阱

 
阅读更多

Python三目运算,and or陷阱

分类: Python 216人阅读 评论(0) 收藏 举报

在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的方法,或者我的方法

在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中实现三目运算的方法 在编程领域中,三目运算符是一种常见的条件运算符,它基于一个布尔表达式的真假结果返回两个不同的值之一。虽然Python并没有直接提供类似于C语言中的`?:`这样的三目运算符,但我们...

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

    下面说的和三目运算有点相似,但又不一样,实在不知道该如何拟定标题,先就是这个标题吧,大家都知道python中没有三目运算,但是and/or有点类似三目运算: and/or 单独使用表示逻辑关系与和或,也可以组和使用,用法如下 and...

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

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

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

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

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

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

    怎么用python输入计算公式-Python基础教程之输入输出和运算符.pdf

    6. **三元运算符**:Python没有标准的三目运算符,但可以使用条件表达式实现类似的功能,即`value_if_true if condition else value_if_false`。如果条件`condition`为真,表达式返回`value_if_true`,否则返回`...

    对numpy中向量式三目运算符详解

    在numpy中,向量化操作是一种利用数组运算代替Python原生循环的技术,可以极大地提高计算效率和代码的简洁性。其中,numpy.where是一个功能强大的函数,它实现了三目运算符的向量化版本,可以在单一函数调用中完成...

    Python三元运算与lambda表达式实例解析

    三元运算(三目运算) # 判断两个数中的较大者 fun(a1,a2): return a1 if a1>a2 else a2 v = fun(5,2) print (v) # v = 5 lambda运算(一行运算符) #规范 lambda 参数1,参数2 : 返回值 举例 fun = lambda a1,...

    python 三元运算符使用解析

    三元运算又称三目运算,是对简单的条件语句的简写 简单条件语句: if 条件成立: val = 1 else: val = 2 改成三元运算: val = 1 if 条件成立 else 2 举例: a = 2 b = 5 val = a if a > b else b print(val) # ...

    python期末考试复习题(带答案).pdf

    在Python的期末考试中,可能会涵盖各种核心概念,包括数据类型、内存管理、标识符规则、布尔运算、字符串操作、字典创建、条件语句、编码与解码、函数使用等。 1. **数据类型的合法性**: Python支持多种数据类型...

    python知识点.docx

    =、is、is not)以及逻辑运算符(and、or、not)。三目运算符提供了一种简洁的条件判断表达式,如`print(a) if a > b else print(b)`。 列表和元组是Python中的两种序列类型。列表是可变的,而元组是不可变的。两者都...

    python运算符.docx

    Python 语言支持多种类型的运算符,包括算术运算符、比较运算符、赋值运算符、逻辑运算符、位运算符、成员运算符、身份运算符和三目运算符等。 一、 算术运算符 算术运算符用于执行基本的算术操作,例如加、减、乘...

    最新python程序设计课后习题答案-第三单元演示教学.doc

    - 正确统计“成绩(mark)优秀的男生以及不及格的男生”的人数的 `if` 语句是 `if gender=="男" and (mark<60 or mark>=90): n+=1`,这将同时考虑男性且成绩不及格或优秀的情况。 3. **Python 逻辑运算符优先级** ...

    python真题.pdf

    B选项是C/C++风格的三目运算符,在Python中不合法;C选项缺少冒号,不合法;D选项是合法的无限循环。 11. 循环次数:给定的while循环中,k每次减半,直到k小于1。因为k初始为1000,循环执行次数是log2(1000)+1,约...

    python笔记(bilibli网课自学)

    - Python中的逻辑运算符包括`and`、`or`、`not`。 - 使用时需要注意优先级,并适当使用括号来明确运算顺序。 10. **条件语句** - 使用`if`、`elif`、`else`构建条件分支。 ```python if a > b: # 条件成立时...

    PYTHON-2-EXCHANGE\etc.

    Python中的比较运算结果总是返回一个布尔值(`True` 或 `False`)。布尔值在Python中是一种基本的数据类型,它们在逻辑判断和条件语句中扮演重要角色。布尔值可以通过`bool()`函数转换,`bool(0)`会返回`False`,而`...

    Python数据类型学习笔记

    带你走进数据类型 一:整数、浮点数 Python中整数和浮点数的定义以及运算和C++都是一样的,我在这里...另外,还有三种常见的布尔运算符and、or和not以及三目运算符and…or…。 Python中还有一种特殊的值:空值,用None

Global site tag (gtag.js) - Google Analytics