为什么在Python中“ 0,0 ==(0,0)”等于“(0,False)”?

发布于 2021-01-29 18:18:03

在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
被浏览
226
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    前两个表达式都解析为元组:

    1. (0, 0) == 0(即False),然后是0
    2. 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



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看