【问题标题】:Why does equality not appear to be a symmetric relation in Python? [duplicate]为什么相等在 Python 中似乎不是对称关系? [复制]
【发布时间】:2020-07-12 17:17:04
【问题描述】:

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

not(5>7) == True

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

True == not(5>7)

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

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

【问题讨论】:

  • 这个我还没弄明白。我是python shell,not(5>7) == 100 也是True
  • @tdelany 100!= 0 所以它比较真实
  • @PatrickArtner - 仅用于寻找布尔比较的东西,例如ifTrue == 100False。既然 50 和 100 都是真的,50 == 100 会是真的吗?

标签: python syntax-error comparison-operators


【解决方案1】:

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

True == not (5 > 7)
# SyntaxError: invalid syntax
True == (not (5 > 7))
# True

解释可以在docs:

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

基本上,解释器认为您在比较 Truenot

【讨论】:

  • 对,所以not(5>7) == True 归结为not(False) == True(这里没问题),而True == not(5>7) 归结为True == not(False),因为Truenot 是相邻的其他,出现您描述的问题。我理解正确吗?
  • True == not(5 > 7) 归结为 (True == not) (False),在这种情况下,第一个语句显然没有意义。
  • 好的,谢谢。这是一个非常有见地的答案。
  • 对此进行扩展或使其更明确:not 是一个运算符(类似于一元 - 运算符),而不是像 abs 这样的函数 not(...) 似乎意味着。 not 本身不需要括号,仅当您要强制执行运算符的评估顺序时才需要括号。 @乔
  • @Joe: not(5>7) == True 归结为 not (False == True)not 不是函数,not(5>7) 中的括号和缺少空格具有误导性。这种混淆是不将关键字视为函数的主要原因之一。
猜你喜欢
  • 2020-08-16
  • 1970-01-01
  • 2014-01-27
  • 1970-01-01
  • 2013-10-16
  • 1970-01-01
  • 1970-01-01
  • 2013-02-10
  • 2011-08-01
相关资源
最近更新 更多