本质上,这种明显奇怪的行为来自这样一个事实:表达式的右侧是元组,而左侧不是元组。在
使用以下行可以获得预期结果,该行将元组与元组进行比较:(a, b) == (1, 2)
您的表达式等效于:
^{pr2}$
它是一个元组,包含a,b和{}之间的比较,以及{}。在
您可以看到使用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),比较它们并返回值。在