Sid*_*Sid 10 python python-3.x
为什么下面两个变量的比较返回(1, False, 2),而不是仅仅返回True。
a = 1
b = 2
a,b == 1,2
Run Code Online (Sandbox Code Playgroud)
Hra*_*bal 14
本质上,这种明显的怪异行为是由于表达式的右侧是一个元组,而左侧不是。
此行将元组与元组进行比较,从而达到了预期的结果:
(a, b) == (1, 2)
Run Code Online (Sandbox Code Playgroud)
相反,您的表达式等效于:
(a, b == 1, 2)
Run Code Online (Sandbox Code Playgroud)
这是一个元组,包含和,和a之间的比较。b12
您可以使用该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
Run Code Online (Sandbox Code Playgroud)
您可以看到,在第一个评估中python正在loading a,然后先进行加载,然后b再加载比较(1)的右侧元素,然后比较最后两个加载的元素,然后加载第二个右元素,然后使用的结果构建一个元组这些操作并将其返回。
在第二个代码中,python加载了左侧(操作0、2和4),加载了右侧(操作6),比较它们并返回值。
Ale*_*ine 10
您需要使用括号显式比较两个元组:
a = 1
b = 2
print((a,b) == (1,2)) # True
Run Code Online (Sandbox Code Playgroud)
现在,您正在创建元组(a, b == 1, b)。评估为(1, False, 2)。
| 归档时间: |
|
| 查看次数: |
385 次 |
| 最近记录: |