为什么“True == not False”是语法错误?

新手上路,请多包涵

将布尔值与 == 进行比较在 Python 中有效。但是当我应用布尔值 not 运算符时,结果是语法错误:

 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> 是一个语法有效的表达式。

原文由 Tim Martin 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 529
2 个回答

它与 Python 中的运算符优先级有关(解释器认为您正在比较 True 和 not,因为 == 的优先级高于 not )。您需要一些括号来阐明操作顺序:

 True == (not False)

通常,您不能在不带括号的比较右侧使用 not 。但是,我想不出在比较的右侧需要使用 not 的情况。

原文由 Rafe Kettler 发布,翻译遵循 CC BY-SA 3.0 许可协议

这只是运算符优先级的问题。尝试:

 >>> True == (not False)
True

Have a look in this table of operator precedences , you’ll find that == binds tigher than not , and thus True == not False is parsed as (True == not) False 这显然是一个错误。

原文由 unwind 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题