在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.oror的使用与and正好相反,自左向右计算整个布尔表达式,如果有为真的值,那么立刻返回第一个为真的值,如果整个表达式为假,则返回最后一个为假的值
print(0 or 1 or 1/0)#返回的是第一个真值,并且不再继续进行运算,所以没有除0报错print(0 or '')#返回的是最后一个假值 3.and-orand-or的组合使用与上述的规则一致,例如:
a = "first"b = "second"print(False and a or b) #输出为secondprint(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 = 0b = "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 bprint(result1)result2 = a if 1 < 0 else bprint(result2)简单来说就是if后边跟bool表达式,如果为真,就去最前面a,否则取后边的b。