分享
三行代码  ›  专栏  ›  技术社区  ›  Rocky Li

python中意外的多运算符行为[重复]

  •  4
  • Rocky Li  · 技术社区  · 9 月前
    >>> 5 in [1, 2, 3, 4] == False
    False
    

    我知道这是一种奇怪的方式来测试会员资格

    >>> 5 not in [1, 2, 3, 4]
    True
    

    是“正确的”方法。令我困惑的是,它的行为与两者不同

    >>> (5 in [1, 2, 3, 4]) == False
    True
    

    >>> 5 in ([1, 2, 3, 4] == False)
    TypeError ...
    

    我有没有漏掉一些显而易见的东西?(在Python2.7和Python3.4中测试)。

    为了澄清,我理解最后三个片段。我问的是 第一 片段,为什么不同。

    0 回复  |  直到 2 年前
        1
  •  4
  •   user2357112    2 年前

    这是一个链式的比较。你可能知道你可以

    1 < 2 < 3
    

    在python中,它相当于 (1 < 2) and (2 < 3) . (或许你没有,现在你知道了)同样的事情也适用于 in == .

    5 in [1, 2, 3, 4] == False
    

    相当于

    (5 in [1, 2, 3, 4]) and ([1, 2, 3, 4] == False)
    

    自从 [1, 2, 3, 4] 不等于 False ,整个表达式的计算结果为 .