布尔上下文中的 bool 和 int 类型
bool and int types in boolean contexts
我在布尔上下文中有这段代码:
True and False or 2
输出:2
此表达式的类型检查结果为 int
。
接下来,我将代码修改为:
True and False or True
输出:True
此表达式的类型检查结果为 bool
- 为什么第一个代码的输出是
2
?
- 表达式的计算结果不应为布尔值吗?
如果不是这样,为什么?
这里您只需要知道 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.
因此,由于 or
的 precedence 低于 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
我认为您很清楚 and
和 or.
之间的运算符优先级根据 Python 文档,object 是 returned.
>>> 1 and 2
会return2
根据快捷方式评价。
等等。
我在布尔上下文中有这段代码:
True and False or 2
输出:2
此表达式的类型检查结果为 int
。
接下来,我将代码修改为:
True and False or True
输出:True
此表达式的类型检查结果为 bool
- 为什么第一个代码的输出是
2
? - 表达式的计算结果不应为布尔值吗?
如果不是这样,为什么?
这里您只需要知道 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.
因此,由于 or
的 precedence 低于 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
我认为您很清楚 and
和 or.
之间的运算符优先级根据 Python 文档,object 是 returned.
>>> 1 and 2
会return2
根据快捷方式评价。
等等。