Python三目运算,and or陷阱
来源:互联网 发布:牡医学院网站网络教学 编辑:程序博客网 时间:2024/05/20 00:36
在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陷阱
- 【Python】Python三目运算,and or陷阱
- Python三目运算符and or和if else以及注意事项
- python之位运算,and , or
- python中运算符and、or、not
- python中运算符and、or、not
- 三目运算符的陷阱
- Lua逻辑and和or的设计和三目运算符
- python 三目运算
- python 三目运算
- Perl and or 运算
- AND & OR 运算符
- python and or and-or
- 今天开始学Python(and 和 or 运算)
- python三目运算符
- python的三目运算
- Python三目运算符
- Python 三目运算符
- Oracle 表连接方式分析
- Maven 杂记一
- VC中CRectTracker在CScrollView中的问题解决办法
- Android入门到精通(二) (应用程序基本元素与结构)
- Maven 杂记二:maven2完全使用手册
- Python三目运算,and or陷阱
- 数的整除性质
- 一个浮动+触发的js代码
- Maven 杂记三
- Android Intent 使用整理
- JAX-WS发布WebService实践1:——整数四则运算器
- 求助:无法卸载:一个或多个应用程序需要此程序集
- 发送已创建用户电子邮件通知
- UVa 10131 Is Bigger Smarter?