有人可以帮助解释以下内容:
1 and 5
5 and 1
以上分别给出5
和1
。 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。
答案 0 :(得分:2)
表达式 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}表示} False
由0
表示。因此,1 == True
会返回True ,因为它们是相同的。
请注意,正如this question中所讨论的那样,在Python 2.x中不保证True
和False
可以重新定义。在Python 3.x它们是关键字,它们总是分别等于1和0.