在用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 返回真实 i!= 0 ,直觉上我会指望真实&真实返回 True ,但是当我运行 foo()== False& i!= 0 我收到False,当我运行(foo()== False)&我!= 0 我按照最初的预期得到了真实。这里发生了什么?
答案 0 :(得分:2)
这是简单的蟒蛇操作顺序。在
foo()==False & i!=0
按位且&
的优先级高于==
。因此,你真的在评估
foo()==(False & i)!=0
如果您使用逻辑和&
替换按位和and
,您的答案将按预期显示
>>> foo()==False and i!=0
True
详细了解here
答案 1 :(得分:1)
&
的优先级高于==
和!=
,因此请使用(foo()==False) & (i!=0)
确保不会发生操作数优先级冲突。
答案 2 :(得分:1)
原因是python中有运算符优先级,请参考doc:
比较(==,!=
)的优先级低于按位AND(&
):
foo()==False & i!=0
==> foo()==(False & i)!=0
(foo()==False) & i!=0
==> ((foo()==False) & i)!=0
答案 3 :(得分:0)
foo()
是Bitwise运算符,您可以使用它来查看数字是偶数还是奇数。由于False
返回&
,其被视为0且0不被视为奇数,因此,位运算符False
将返回fetch('/api/listofrentals/2')
,因为它不是奇数。
答案 4 :(得分:0)
根据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
我最初尝试包含一个表,但不知道如何在stackoverflow中执行此操作。遗憾。