【问题标题】:weird behaviour in python conditional operators for "and" and "&" [duplicate]“and”和“&”的python条件运算符中的奇怪行为[重复]
【发布时间】:2017-11-23 13:13:13
【问题描述】:

以下是使用“&”和“和”条件运算符尝试的不同场景及其结果。 (使用 Python 2.7)

  1. 使用“&”运算符:

  1. 使用“和”运算符:

想知道为什么两个条件运算符表现出不同的行为? 用真实场景进行解释会很有帮助。

提前致谢。

【问题讨论】:

标签: python python-2.7


【解决方案1】:

& 不是条件运算符。它代表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

您现在可以分解对您的第二个陈述的评估吗?

【讨论】:

  • 您能否详细说明答案。如果我们喜欢 (point == 1 & (score > 0)) => 返回 true。
  • @PrashantkumarKB 我已经更新了答案。我不确定您要做什么,但除非您要操作位,否则不要使用&。
【解决方案2】:

问题在于& 实际上不是逻辑“和”,而是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),并且由于这两种情况都是真实的,所以整个事情都是真实的。

【讨论】:

  • 你说得对,我已经更正了我的答案。
【解决方案3】:

and 测试两个表达式在逻辑上是否为 True,而 &(与 True/False 值一起使用时)测试两者是否为 True。

【讨论】:

  • >>> point = 1 >>> score = 2 >>> point == 1 True >>> score > 0 True
【解决方案4】:

& 是 bitwise 与运算符,而 and 是逻辑运算符。

【讨论】:

    猜你喜欢
    • 2015-02-01
    • 1970-01-01
    • 2011-04-05
    • 2010-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-01
    • 1970-01-01
    相关资源
    最近更新 更多