为什么'True == not False'是Python中的语法错误?
将Python中的布尔值与==
进行比较。但是,当我申请布尔not
操作,结果是一个语法错误:为什么'True == not False'是Python中的语法错误?
Python 2.7 (r27:82500, Sep 16 2010, 18:02:00)
[GCC 4.5.1 20100907 (Red Hat 4.5.1-3)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> True == True
True
>>> False == False
True
>>> True is not False
True
>>> True == not False
File "<stdin>", line 1
True == not False
^
SyntaxError: invalid syntax
>>>
为什么这是一个语法错误?我期望not False
是一个返回布尔值的表达式,并且True == <x>
在<x>
是具有有效语法的表达式时是有效的语法。
它与operator precedence in Python(口译员认为你比较真,没有,因为==
比not
有更高的优先级)。你需要一些括号来阐明操作顺序:
True == (not False)
一般情况下,在比较的右侧没有括号不能使用not
。但是,我无法想象在比较的右侧需要使用not
的情况。
是否有运营商优先的原因,还是只是一个愚蠢的“功能”? Wow; – 2011-05-23 16:52:07
哇;这很有趣。我无法想象任何其他语言,我知道否定具有如此低的优先级,当然不低于平等! – verdesmarald 2011-05-23 16:54:39
@Jim:从历史上看,尤其是来自数学,大多数编程语言的运算符优先级大多是任意的。至少在加法和乘法之外。 – Joey 2011-05-23 16:55:12
这只是运营商优先权的问题。
尝试:
>>> True == (not False)
True
有在this table of operator precedences一看,你会发现,==
结合比not
tigher,从而True == not False
被解析为(True == not) False
这显然是一个错误。
我认为你要找的是“而不是”。这给你你正在寻找的结果。如果你的比较布尔值是一个复合布尔表达式,下面是一个示例网站Compound Boolean Expression。
>>> True and True
True
>>> True and not True
False
>>> True and not False
True
>>> False and not True
False
>>> False and not False
False
>>> False and False
False
注意,说:“真不假”是*不*同为“真正的(不假)”。 “不是”是一个独特的运算符,意思是“不相同”,而“真(非)”读作“真与否是假的相同”。只是一句话,因为你的榜样似乎就像你会假设的那样,两者都是一样的。 – lunaryorn 2011-05-23 17:12:41
'True == not'是实际的语法错误,之后的任何内容都是不相关的。 – dansalmo 2013-12-28 23:39:26
并且对于记录来说,无论比较的类型是**,任何**比较运算符都加上'not',**都会失败。 'True not'False'','3.3> = not 4.5','{}不是[]','set()== not None'和'slice()!= not lambda:x' ** all **引发相同的语法错误。这不仅限于'== not'和布尔值。 –
2014-01-31 17:12:15