我在布尔上下文:
中有这段代码True and False or 2
输出:2
此表达式的类型检查导致int
。
接下来,我将代码修改为:
True and False or True
输出:True
此表达式的类型检查导致bool
2
中的输出? 答案 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)
我认为你很清楚and
和or.
之间的运算符优先级。根据Python文档,返回对象。
>>> 1 and 2
将根据shorcut评估返回2
。
等等。