【问题标题】:Why is ‘==‘ coming before ‘in’ in Python?为什么'=='在Python中出现在'in'之前?
【发布时间】:2019-04-24 01:46:52
【问题描述】:

以下代码输出 False,根据 Python 操作顺序,它应该输出 True(顺序应该是 -> ==,而不是相反)。为什么 == 先进来?

y = "33"
"3" in y == True

输出

False

【问题讨论】:

  • in== 运算符具有相同的优先级。所以我相信他们是从左到右评估的。为什么不使用() 以便在代码中清楚您想要什么? ("3" in "33") == True
  • 另外,这是运算符链接的一个实例,因为==in 都算作比较运算符。所以这被评估为('3' in y) and (y == True)
  • 另外,您永远不需要比较 True 或 False。如果括号正确,您的陈述将意味着 True == True 或 False == True
  • 另外,为什么不直接写3 in y呢?无需对照 bool 检查 bool 结果。你可以阅读operator chaining here

标签: python


【解决方案1】:

现有答案提供了有用的建议,您不应该将布尔值与 True 进行比较,因为它是多余的。然而,没有一个答案真正回答了根本问题:“为什么"3" in y == True 会评估为False?”。

juanpa.arrivillaga 在评论中回答了这个问题:

此外,这是运算符链接的一个实例,因为==in 都算作比较运算符。所以这被评估为('3' in y) and (y == True)

在 Python 中,比较运算符可以链接。例如,如果要检查abcd 是否在增加,可以写a < b < c < d 而不是a < b and b < c and c < d。同样,您可以检查它们是否都与a == b == c == d 相等。

Python 文档here 中描述了链式比较:

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

【讨论】:

    【解决方案2】:

    在 python 中,比较、成员资格测试和身份测试都具有相同的优先级。 检查成员资格的关键字in 返回bool,无需与第二个bool 进行额外比较。但是,您可以像这样对表达式进行分组...

    y = "33"

    ("3" in y) == True

    【讨论】:

    • 这并没有回答“为什么"3" in y == True 评估为False?”的问题
    猜你喜欢
    • 2020-05-09
    • 1970-01-01
    • 2018-04-25
    • 1970-01-01
    • 2017-03-26
    • 2013-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多