为什么这个操作数返回False?

时间:2017-09-27 01:29:00

标签: python boolean operators

在用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 我按照最初的预期得到了真实。这里发生了什么?

5 个答案:

答案 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中执行此操作。遗憾。