短路逻辑
Python中进行逻辑运算的时候, 默认采用的是一种叫做短路逻辑的运算规则. 名字是很形象的, 下面直接看代码
print True and 1 # 1 print True or 1 # True print False and 1 # False print False or 1 # 1
可以看到, 虽然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, 就是因为 False 和 or 判断不了式子的结果, 整个式子是True还是False, 是由 or 后面的值来决定的, 所以Python要把整个式子看完, 所以返回1.
明白了什么是短路逻辑之后, 我们看一看三目运算符
三目运算符
三目运算符, 又叫三元运算符. 熟悉Java的同学可能会知道, 它的形式是这样的 b?x:y , 对于这个表达式来说, 如果条件 b 为 True , 那表达式的结果就是 x , 如果 b 为 False , 那表达式的结果就是 y . 这是一种很方便的写法, 比if语句简洁很多.
但Python中早期没有类似写法的三目运算符, 所以就出现了一种利用短路逻辑, 用 and 和 or 来模拟三目运算符的写法, 下面我们看代码
A = X and 'table' or False
这句代码就是在利用短路逻辑模拟三目运算符, 当 X 为 True 的时候, A 会被赋值为 'table' , 当 X 为 Flase 的时候, A 会被赋值为 False ;
乍一看好像很不错, 但这种写法却有个坑, 我们看这句代码
True and 0 or 1
如果我们把刚才的写法当三目运算符来使用, 那么条件语句是 True , 表达式应该返回 0 才是我们期望的结果, 但实际上这个表达式会返回 1 ; 因为 True and 0 的值为 True , 整个表达式的值是由 or 之后的值来决定的, 所以Python会对后面的值做判断, 导致返回了 1 , 这就是为什么 and...or 这个写法有坑的原因
正确写法
如果想在Python中使用三目运算符, 可以使用 if...else 写法, 具体看代码
# <为真时的结果> if <判定条件> else <为假时的结果>0 if True else 1
用 if...else 的写法, 结果就会跟我们期望的相同, 当条件为 True 时, 返回前面的值, 条件为 False 时, 返回后面的值. 不会有坑, 只是写的时候要注意, 条件和返回值的顺序跟Java中的三目运算符不同, 不要搞错即可
以上就是使用Python三目计算符的用法及短路逻辑方法介绍的详细内容,更多请关注Gxl网其它相关文章!
查看更多关于使用Python三目计算符的用法及短路逻辑方法介绍的详细内容...