比较a,b == 1,2有什么问题?

时间:2019-07-20 07:56:16

标签: python python-3.x

我正在编写一些代码,并且在代码a = 1b = 2中。那么,a,b == 1,2为什么不正确呢?相反,Python显示(1,False,1)。这是为什么?是什么意思?

a = 1
b= 2
a,b == 1,2

2 个答案:

答案 0 :(得分:9)

您需要使用括号显式比较两个元组:

a = 1
b = 2
print((a,b) == (1,2))  # True

现在,您正在创建元组(a, b == 1, b)。得出的值为(1, False, 2)

答案 1 :(得分:9)

本质上,这种明显的怪异行为是由于表达式的右侧是一个元组,而左侧不是。

此行实现了预期结果,该行将元组与元组进行比较:

(a, b) == (1, 2)

您的表达式等效于:

(a, b == 1, 2)

这是一个包含ab12之间的比较的元组。

您可以使用dis模块查看python在做什么,以查看不同的行为:

import dis

dis.dis("a,b == 1,2")
  1           0 LOAD_NAME                0 (a)
              2 LOAD_NAME                1 (b)
              4 LOAD_CONST               0 (1)
              6 COMPARE_OP               2 (==)
              8 LOAD_CONST               1 (2)
             10 BUILD_TUPLE              3
             12 RETURN_VALUE

 dis.dis("(a,b) == (1,2)")
  1           0 LOAD_NAME                0 (a)
              2 LOAD_NAME                1 (b)
              4 BUILD_TUPLE              2
              6 LOAD_CONST               0 ((1, 2))
              8 COMPARE_OP               2 (==)
             10 RETURN_VALUE

您可以看到,在第一次评估中,python正在加载a,然后正在加载b,然后加载比较的右侧元素(1)并比较最后两个加载元素,然后加载第二个右元素,然后使用这些操作的结果构建一个元组并将其返回。

在第二个代码中,python加载左侧(操作0、2和4),加载右侧(操作6),比较它们并返回值。