Python中的布尔逻辑

时间:2014-10-14 08:57:53

标签: python python-2.7

有人可以帮助解释以下内容:

1 and 5
5 and 1

以上分别给出51。 Q1:为什么and运算符不可交换?

下一步:

1==True # gives True

然而:

5==True
5==False

都给False。 Q2:为什么?

https://docs.python.org/2/library/stdtypes.html第5.1节说" ...所有其他值都被视为True",因此5应为True。

3 个答案:

答案 0 :(得分:2)

来自documentation

  

表达式 x和y 首先评估 x ;如果 x 为false,则返回其值;否则,将评估 y 并返回结果值。

     

表达式 x或y 首先评估 x ;如果 x 为true,则返回其值;否则,将评估 y 并返回结果值。

请注意,if x is false表示if bool(x) == False

答案 1 :(得分:1)

关于and的第一个问题的答案是and的结果是第一个表达式的值,如果它是假的(0,False,None等),否则它是第二个表达式的值。一堆编程语言共享这种构造;在像Bash和Perl这样的语言中,广泛依赖它是惯用的。在Python中,我们主要使用and作为常规布尔逻辑,并且通常不太常用于短路。

至于1==True是真的但是5==True是假的,好吧,坦率地说,我希望1==True也返回假,但显然现在改变它已经太晚了。 :)

答案 2 :(得分:1)

回答你的第二部分:

所有非零整数都是" Truthy"但这并不意味着5 == True将返回True==运算符正在比较值,并且在比较值时,5不等于True。如果您比较bool(5) == True,则会返回True。执行if 5:时,您实际执行的操作是if bool(5):

1 == True返回True的原因是,在boolean类中,int类是True的子类,1由{{1}表示} False0表示。因此,1 == True会返回True ,因为它们是相同的。

请注意,正如this question中所讨论的那样,在Python 2.x中不保证TrueFalse可以重新定义。在Python 3.x它们是关键字,它们总是分别等于1和0.