在python中添加布尔表达式时,似乎将它们括在括号中会在添加它们时将它们转换为int
,但不这样做会维护它们的类型:
>>> ((0>1) + (0>9))
0
>>> (0>1 + 0>9)
False
>>> (0>1 + (0>9))
False
这是为什么?在我看来,括号只应该用于改变操作的顺序(除了你使用括号来定义元组的一些情况),而不是内容的类型,所以我希望:
(<expression>) == <expression>
答案 0 :(得分:5)
>>> ((0>1) + (0>9))
0
这是整数加法,因为False
是整数实例。 bool
未定义添加,因此在父类False + False
上解析int.__add__
。
>>> (0>1 + 0>9)
False
这是一个链式比较,伪装成0 > 1 > 9
。
>>> (0>1 + (0>9))
False
这是一次定期比较,伪装成0 > 1 + False
。