Python中的and-or以及三目表达式语法
1.and
在python中,and自左向右扫描布尔表达式,如果所有值为真,则返回最后一个为真的表达式,如果为假,则返回第一个为假的表达式,例如:
print(2 and 1 and 3)
#这种情况下打印的值为3,即整个表达式中最后一个为真的部分
print(1 and 3 and 0 and 4)
#这种情况下打印第一个为假的部分
print(1 and 0 and 3/0)
#注意这个地方的运算方式与C一样,如果判断这个布尔表达式已经为假,则返回第一个为假的部分,并且不再进行接下来的计算,这里就不会报告除0的错误
注意这个地方会执行短路规则,一旦计算得出表达式是假,则直接返回第一个为假的值,不继续进行运算。
2.or
or的使用与and正好相反,自左向右计算整个布尔表达式,如果有为真的值,那么立刻返回第一个为真的值,如果整个表达式为假,则返回最后一个为假的值
print(0 or 1 or 1/0)
#返回的是第一个真值,并且不再继续进行运算,所以没有除0报错
print(0 or '')
#返回的是最后一个假值
3.and-or
and-or的组合使用与上述的规则一致,例如:
a = "first"
b = "second"
print(False and a or b) #输出为second
print(True and a or b) #输出为first
这时候,大家会发现这样使用跟三目表达式很相似,也确实如此,但是有一个问题就是如果a的值为假的时候,就不能像真的三目表达式一样工作了(这时候会进行and运算之后还会判断 or b的值),为了解决这个问题,可以使用列表的方法,例如:
a = "first"
b = "second"
print( (1 and [a] or [b] )[0] )
print( (0 and [a] or [b] )[0] )
a = 0
b = "second"
print( (1 and [a] or [b] )[0] )
print( (0 and [a] or [b] )[0] )
这样,就算a的值是假,因为列表元素总是不为空的,所以总是可以得到正确结果。
4.三目运算符
在前面的and-or的组合使用其实就相当于对三目运算符的模拟,其实python本身也有自己的三目表达式,python的三目表达式与其他语言不太一样,例如在C等语言中,我们的三目运算符是这样的格式:
bool ?a:b
在python中使用 if – else:
a = "first"
b = "second"
result1 = a if 1 > 0 else b
print(result1)
result2 = a if 1 < 0 else b
print(result2)
简单来说就是if后边跟bool表达式,如果为真,就去最前面a,否则取后边的b。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/116850.html