【发布时间】:2017-11-23 13:13:13
【问题描述】:
以下是使用“&”和“和”条件运算符尝试的不同场景及其结果。 (使用 Python 2.7)
- 使用“&”运算符:
- 使用“和”运算符:
想知道为什么两个条件运算符表现出不同的行为? 用真实场景进行解释会很有帮助。
提前致谢。
【问题讨论】:
-
请将文本作为文本发布
标签: python python-2.7
以下是使用“&”和“和”条件运算符尝试的不同场景及其结果。 (使用 Python 2.7)
想知道为什么两个条件运算符表现出不同的行为? 用真实场景进行解释会很有帮助。
提前致谢。
【问题讨论】:
标签: python python-2.7
& 不是条件运算符。它代表the bitwise and。不仅是不同的运算符,而且the operator precedence 也不同(and 低于> 而& 高于)。
首先举个例子:
>>> 1 and 2
2
>>> 1 & 2
0
现在让我们分析您的案例:
>>> point = 1
>>> score = 2
>>> point == 1 & score > 0
现在运算符优先级开始了,最后一行相当于
>>> point == (1 & score) > 0
请注意,== 和 > 具有相同的优先级。所以让我们评估一下:
>>> 1 & score
0
>>> point == 0 > 0
最后一行等价于(point == 0) > 0(当运算符具有相同的优先级时,您只需从左到右)。让我们评估一下:
>>> point == 0
False
>>> False > 0
False
总之
>>> point == 1 & score > 0
False
您现在可以分解对您的第二个陈述的评估吗?
【讨论】:
&。
问题在于& 实际上不是逻辑“和”,而是bitwise operator。因此,它将按每个位比较两个数字,如果前两个数字都设置了该位,则生成一个设置了该位的数字。所以1 & 2会给你0。
这通常不是问题(True 为 1,False 为 0) - 除了 operator precedence for & 和 and 相对于 > 和 = 不同。
所以1 == 1 & 2 > 0(第一种情况):
1 == (1 & 2) > 0 或1 == 0 > 0,因为1 == 0 是假的,所以整个事情都是假的。而1 == 1 and 2 > 0(第二种情况):
(1 == 1) and (2 > 0),并且由于这两种情况都是真实的,所以整个事情都是真实的。【讨论】:
and 测试两个表达式在逻辑上是否为 True,而 &(与 True/False 值一起使用时)测试两者是否为 True。
【讨论】:
& 是 bitwise 与运算符,而 and 是逻辑运算符。
【讨论】: