为什么相等在 Python 中似乎不是对称关系?

Joe*_*Joe 23 python syntax-error comparison-operators

我正在学习比较运算符,并且我正在玩 True 和 False 语句。我在 Python shell 中运行了以下代码:

not(5>7) == True
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,这返回了True。但是,我然后运行了以下代码:

True == not(5>7)
Run Code Online (Sandbox Code Playgroud)

并且出现了语法错误。这是为什么?如果第一行代码是有效的语法,那么第二行代码肯定也应该是有效的。我哪里错了?

(提供一点背景知识,我的理解是=在Python中仅用于变量赋值,而==与数学符号'='密切相关。)

ada*_*mgy 33

语法错误似乎是由not关键字引起的,而不是(双关语)相等运算符:

True == not (5 > 7)
# SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)
True == (not (5 > 7))
# True
Run Code Online (Sandbox Code Playgroud)

可以在文档中找到解释:

not具有比非布尔运算符低的优先级,因此not a == b被解释为not (a == b), 并且a == not b是语法错误。

基本上,解释认为你比较Truenot

  • @Joe:“not(5>7) == True”归结为“not (False == True)”。“not”不是一个函数,“not(5>7)”中的括号和缺少空格会产生误导。这种混淆是不将关键字视为函数的主要原因之一。 (8认同)
  • True == not(5 > 7) 归结为 (True == not) (False),在这种情况下,第一个语句显然没有意义。 (2认同)