当前位置: 首页 > 面试题库 >

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

杜哲彦
2023-03-14
问题内容

在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

为什么两种方法的结果不同?相等运算符对元组的处理方式是否不同?


问题答案:

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

  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



 类似资料:
  • 问题内容: 为什么在Python中等于?它不应该像那样抛出异常吗? 问题答案: Wikipedia对历史进行了有趣的报道,并对以下内容的价值有不同的看法: 至少从19世纪初期开始,辩论一直在进行。当时,大多数数学家都同意,直到1821年,柯西(Cauchy)以及诸如未定义形式的表格之类的表达式才被列出。在1830年代,利比里(Libri)发表了令人信服的论点,莫比乌斯(Möbius)站在他身边。

  • 问题内容: 我正在尝试做一些基本的数学运算,并且一直以的形式弹出。我敢肯定它与它有关,但我不知道如何解决它。我需要使用整数,但是要得出这些整数的数学运算使用小数。我该怎么做? 问题答案: 这对于Blackberry而言并不特殊,它是标准的Java行为。 这是因为您正在执行整数数学运算: 请改用Double或更改顺序

  • 问题内容: 我有以下代码: 旨在将物料价格初始化为0,然后获取有关其的信息。如果价格被告知为“ e”,则表示交换而不是卖出,其作为负数存储在数据库中。 也有可能将价格保留为0,这是因为该项目是奖励商品,或者是因为价格将在以后设置。 但是,每当未设置价格时,其初始值将为0,则上述循环将评估为true,并将价格设置为-1。也就是说,它认为0等于“ e”。 如何解释呢? 当价格提供为0(初始化后)时,该

  • 问题内容: 在Python 2.6中查看Queue.py时,我发现这个结构有点奇怪: 如果maxsize为0,则队列永远不会满。 我的问题是在这种情况下如何运作?如何0 < 0 == 0被认为是错误的? 问题答案: 我相信Python对关系运算符的序列有特殊的处理方式,以使范围比较易于表达。能说比说好得多。 这些称为链接比较。这是他们文档的链接。 在您谈论的其他情况下,括号会强制在一个关系运算符之

  • 我的代码: 问题是p1返回如下:。这里有一个解决方案,但对我来说没用。我将这些点保存在一个数组列表中。当我想从数组列表内部获取点时,它会返回[]点。我认为等待的原因是addongloballayouttlistener。出于这个原因,我应该找到另一个快速的解决方案来获得点的真实值。

  • 问题内容: 我的collide_rect函数无法正常工作。如果没有,它将始终返回True。我尝试过在互联网上查找内容,但没有任何内容适合我。我认为碰撞矩形某种程度上没有使用两个Sprite的实际坐标。有人能帮忙吗? PS这是我的第一篇文章:) 问题答案: 返回具有 Surface 对象大小的矩形,但是由于 Surface 对象没有位置,因此它返回始终以(0,0)开始的矩形。 Surface放置在显