设为首页 加入收藏

TOP

Python中三目运算符的正确用法及短路逻辑
2017-01-02 08:15:15 来源: 作者: 【 】 浏览:17
Tags:Python 运算 符的 正确 用法 短路 逻辑

今天在看别人代码时看到这样一种写法, 感觉是个挺容易踩到的坑, 搞清楚后写出来备忘.


Python中进行逻辑运算的时候, 默认采用的是一种叫做短路逻辑的运算规则. 名字是很形象的, 下面直接看代码


可以看到, 虽然1会被当做布尔值计算, 但整个表达式的计算结果却不一定是布尔值, 而是根据表达式的不同而不同. 上面几个表达式不同的结果, 就是短路逻辑. 用大白话讲, 就是一旦Python能判断整个表达式是True还是False, 就不会进行后续的计算了, 就是逻辑被短路了, 后续的表达式被忽略了.


比如True or 1的结果为True就是因为不管or后面是任何值, 整个式子的结果都必定是True, 所以Python看到True, 看到or, 后面的1就不看了, 1被短路了, 返回了True; 同样的False and 1也是一样, 看到False然后是and不管后面是什么, 整个式子的结果必定是False, 所以1被短路了, 返回False.


相应的, 为什么False or 1会返回1, 就是因为Falseor判断不了式子的结果, 整个式子是True还是False, 是由or后面的值来决定的, 所以Python要把整个式子看完, 所以返回1.


明白了什么是短路逻辑之后, 我们看一看三目运算符


三目运算符, 又叫三元运算符. 熟悉Java的同学可能会知道, 它的形式是这样的bx:y, 对于这个表达式来说, 如果条件bTrue, 那表达式的结果就是x, 如果bFalse, 那表达式的结果就是y. 这是一种很方便的写法, 比if语句简洁很多.


但Python中早期没有类似写法的三目运算符, 所以就出现了一种利用短路逻辑, 用andor来模拟三目运算符的写法, 下面我们看代码


这句代码就是在利用短路逻辑模拟三目运算符, 当XTrue的时候, A会被赋值为'table', 当XFlase的时候, A会被赋值为False;


乍一看好像很不错, 但这种写法却有个坑, 我们看这句代码


如果我们把刚才的写法当三目运算符来使用, 那么条件语句是True, 表达式应该返回0才是我们期望的结果, 但实际上这个表达式会返回1; 因为True and 0的值为True, 整个表达式的值是由or之后的值来决定的, 所以Python会对后面的值做判断, 导致返回了1, 这就是为什么and...or这个写法有坑的原因


如果想在Python中使用三目运算符, 可以使用if...else写法, 具体看代码


if...else的写法, 结果就会跟我们期望的相同, 当条件为True时, 返回前面的值, 条件为False时, 返回后面的值. 不会有坑, 只是写的时候要注意, 条件和返回值的顺序跟Java中的三目运算符不同, 不要搞错即可


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Java消息队列--ActiveMQ 实战 下一篇Java 多态——与C++的比较

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

最新文章

热门文章

C 语言

C++基础

windows编程基础

linux编程基础

C/C++面试题目