布尔上下文中的bool和int类型

时间:2015-07-12 07:02:52

标签: python boolean logical-operators

我在布尔上下文

中有这段代码
True and False or 2  

输出:2

此表达式的类型检查导致int

接下来,我将代码修改为:

True and False or True 

输出:True 此表达式的类型检查导致bool

  • 为什么第一个代码2中的输出?
  • 表达式不应该计算为布尔值吗? 如果不是这样,为什么?

4 个答案:

答案 0 :(得分:3)

这里你需要知道的是OR operand的定义。基于python文档:

  

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

因为or的{​​{3}}低于and您的表达式评估如下:

(True and False) or 2

这等于以下内容:

False or 2

因此,基于前面的文档,结果将是右对象的值,即2。

答案 1 :(得分:2)

在Python中,使用'和'和'或',表达式使用所涉及的对象进行评估,而不是像许多其他语言一样使用布尔值。

所以:

1 and 2 will evaluate to 2
1 or 2 will evaluate to 1 (short-circuit)
1 and "hello" will evaluate to "hello"

......等等

如果你想要布尔值,只需用bool(..)

包围整个表达式

进一步阅读: http://www.diveintopython.net/power_of_introspection/and_or.html https://docs.python.org/2/reference/expressions.html#boolean-operations

答案 2 :(得分:0)

当您说True and False时,它会评估为False。 然后你有False or 2评分为2 现在,True and False or True将评估为True,但表达式中的最后一个True。这是由于operator precedence

>>> True and False
False
>>> False or 2
2
>>> 

输出为2而不是True,因为True and False or 2就像

var = (True and False)
if var:
    print(var)
else:
    print(2)

产生

2

因为True and False将始终评估为False

答案 3 :(得分:0)

我认为你很清楚andor.之间的运算符优先级。根据Python文档,返回对象

>>> 1 and 2

将根据shorcut评估返回2。 等等。