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

bool and int types in boolean contexts

我在布尔上下文中有这段代码:

True and False or 2  

输出:2

此表达式的类型检查结果为 int

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

True and False or True 

输出:True 此表达式的类型检查结果为 bool

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

The expression x or y first evaluates x; if x is true, its value is returned; otherwise, y is evaluated and the resulting value is returned.

因此,由于 orprecedence 低于 and,您的表达式计算如下:

(True and False) or 2

等于以下内容:

False or 2

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

当您说 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

在 Python 中,当使用 'and' 和 'or' 时,表达式使用所涉及的对象进行计算,而不是像在许多其他语言中那样使用布尔值。

所以:

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

我认为您很清楚 andor. 之间的运算符优先级根据 Python 文档,object 是 returned.

>>> 1 and 2

会return2根据快捷方式评价。 等等。