为什么在Python中“ 0,0 ==(0,0)”等于“(0,False)”?
在Python中(我仅使用Python 3.6进行过检查,但我相信它也适用于许多以前的版本):
(0, 0) == 0, 0 # results in a two element tuple: (False, 0)
0, 0 == (0, 0) # results in a two element tuple: (0, False)
(0, 0) == (0, 0) # results in a boolean True
但:
a = 0, 0
b = (0, 0)
a == b # results in a boolean True
为什么两种方法的结果不同?相等运算符对元组的处理方式是否不同?
-
前两个表达式都解析为元组:
(0, 0) == 0
(即False
),然后是0
0
,其次是0 == (0, 0)
(仍然False
如此)。
由于逗号分隔符相对于相等运算符具有较高的优先级,因此将表达式进行拆分:Python看到一个元组包含两个表达式,其中一个恰好是一个相等测试,而不是两个元组之间的相等测试。
但是在第二组语句中,
a = 0, 0
不能
是元组。元组是值的集合,与相等性测试不同,元组在Python中没有值。赋值不是表达式,而是语句。它没有可包含在元组或任何其他周围表达式中的值。如果您尝试执行类似(a = 0), 0
的操作以强制将其解释为元组,则会出现语法错误。这样,将元组分配给变量(可以通过编写使其更明确)a = (0, 0)
作为对的唯一有效解释a = 0, 0
。因此,即使没有对的括号
a
,它和都b
被分配了值(0,0)
,因此a == b
也是如此True
。