我正在编写一些代码,并且在代码a = 1
和b = 2
中。那么,a,b == 1,2
为什么不正确呢?相反,Python显示(1,False,1)
。这是为什么?是什么意思?
a = 1
b= 2
a,b == 1,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)
这是一个包含a
,b
与1
和2
之间的比较的元组。
您可以使用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),比较它们并返回值。