为什么这个操作数返回 False?
Why are this operands returning False?
我在 Python 中编写脚本时遇到了一个违反直觉的问题。
>>> def foo():
... return False
...
>>> foo()
False
>>> foo()==False
True
>>> i=1
>>> i!=0
True
>>> foo()==False & i!=0
False
>>> (foo()==False) & i!=0
True
>>>
如你所见 foo()==False returns True as i! =0 确实如此,所以凭直觉我会期望 True & True 到 return True,但是当我 运行 foo()==False & i!=0 我收到 False 当我 运行 (foo()==False) & i !=0 我得到了最初预期的 True。这里发生了什么?
&
的优先级高于 ==
和 !=
在 python 中,因此使用 (foo()==False) & (i!=0)
以确保不会发生操作数优先级冲突。
原因是python有运算符优先级,参考doc:
Comparisons(==,!=
) 的优先级低于 Bitwise AND(&
):
foo()==False & i!=0
==> foo()==(False & i)!=0
(foo()==False) & i!=0
==> ((foo()==False) & i)!=0
这是简单的 python 操作顺序。在
foo()==False & i!=0
按位和&
比==
有更高的优先级。因此,你真的在评估
foo()==(False & i)!=0
如果您将按位和 &
替换为逻辑和 and
,您的答案将按预期出现
>>> foo()==False and i!=0
True
了解更多信息 here
&
是按位运算符,你可以用它来判断一个数是偶数还是奇数。由于 foo()
returns False
被认为是 0 而 0 不被认为是奇数,位运算符 &
将 return False
因为是不是奇数。
根据 python 文档 6.16。运算符优先级 & 的优先级高于 == 或 !=
因此当你 运行 foo()==False & i!=0 被评估如下
foo()==False & i!=0
foo() == (False & True)!= 0 #since 1 is nothing but True
Foo() == False != False
这是错误的。
https://docs.python.org/3/reference/expressions.html#summary
我最初尝试包含 table 但不知道如何在 Whosebug 中执行此操作。对不起。
我在 Python 中编写脚本时遇到了一个违反直觉的问题。
>>> def foo():
... return False
...
>>> foo()
False
>>> foo()==False
True
>>> i=1
>>> i!=0
True
>>> foo()==False & i!=0
False
>>> (foo()==False) & i!=0
True
>>>
如你所见 foo()==False returns True as i! =0 确实如此,所以凭直觉我会期望 True & True 到 return True,但是当我 运行 foo()==False & i!=0 我收到 False 当我 运行 (foo()==False) & i !=0 我得到了最初预期的 True。这里发生了什么?
&
的优先级高于 ==
和 !=
在 python 中,因此使用 (foo()==False) & (i!=0)
以确保不会发生操作数优先级冲突。
原因是python有运算符优先级,参考doc:
Comparisons(==,!=
) 的优先级低于 Bitwise AND(&
):
foo()==False & i!=0
==> foo()==(False & i)!=0
(foo()==False) & i!=0
==> ((foo()==False) & i)!=0
这是简单的 python 操作顺序。在
foo()==False & i!=0
按位和&
比==
有更高的优先级。因此,你真的在评估
foo()==(False & i)!=0
如果您将按位和 &
替换为逻辑和 and
,您的答案将按预期出现
>>> foo()==False and i!=0
True
了解更多信息 here
&
是按位运算符,你可以用它来判断一个数是偶数还是奇数。由于 foo()
returns False
被认为是 0 而 0 不被认为是奇数,位运算符 &
将 return False
因为是不是奇数。
根据 python 文档 6.16。运算符优先级 & 的优先级高于 == 或 != 因此当你 运行 foo()==False & i!=0 被评估如下
foo()==False & i!=0
foo() == (False & True)!= 0 #since 1 is nothing but True
Foo() == False != False
这是错误的。
https://docs.python.org/3/reference/expressions.html#summary
我最初尝试包含 table 但不知道如何在 Whosebug 中执行此操作。对不起。