【问题标题】:What does x in range(...) == y mean in Python 3? [duplicate]x in range(...) == y 在 Python 3 中是什么意思? [复制]
【发布时间】:2018-02-09 23:26:39
【问题描述】:

我刚刚在 Python 3 中偶然发现了以下行。

1 in range(2) == True

我期待这是 True,因为 1 in range(2) 是 True 而 True == True 是 True。

但这会输出False。所以和(1 in range(2)) == True的意思不一样。此外,它与引发错误的1 in (range(2) == True) 的含义不同。

尽管有多年的 Python 经验,但我还是措手不及。怎么回事?

【问题讨论】:

  • @chrisz,它使用的是in,所以如果是这种情况,那就是语法错误(argument of type 'bool' is not iterable)
  • 哎呀,你是对的,我看错了。
  • 今天之前删除的关于 SO 的问题。顺便说一句,由于这种行为,他们的代码是错误的,但他们在我指出之前删除了问题。
  • 表达式相当于(1 in range(2)) and (range(2) == True),其中第二部分为假,使整个条件为假。
  • @Olivier 是的,in 是一个比较运算符有点违反直觉。不过,我必须检查实际文档以确认这种怀疑。

标签: python python-3.x


【解决方案1】:

这是因为两个运算符都是比较运算符,所以它被解释为运算符链接:

https://docs.python.org/3.6/reference/expressions.html#comparisons

比较可以任意链接,例如,x < y <= z 是等价的 到x < y and y <= z,除了y 只被评估一次(但在这两个 当发现x < y 为假时,根本不会评估z)。

所以相当于:

>>> (1 in range(2)) and (range(2) == True)
False

【讨论】:

    猜你喜欢
    • 2016-07-18
    • 2021-05-31
    • 1970-01-01
    • 2014-11-06
    • 2019-12-23
    • 2012-01-09
    • 1970-01-01
    • 2018-05-07
    • 1970-01-01
    相关资源
    最近更新 更多