Python中'_eq_' vs 'is' vs '=='的区别2025年1月5日 | 阅读6分钟 对象检查是 Python 编程的一个重要部分,使开发人员能够评估对象的相等性和身份。在 Python 中,对象是万物的中心——变量、数据结构、函数等等都是对象。因此,理解对象是如何被比较和评估的对于编写高效和正确的代码至关重要。无论是检查值、验证对象身份还是定义自定义的相等行为,对象检查在软件开发的各个方面都起着至关重要的作用。 介绍 eq()、is 和 == 用于比较任务在 Python 中,有三种基本机制用于比较任务:_eq_()、is 和 ==。每种机制都有特定的用途,并且工作方式不同。
理解这些机制之间的区别并知道何时使用它们对于编写清晰高效的 Python 代码至关重要。 eq() 方法:自定义相等比较 _eq_() 方法是 Python 类中的一种特殊方法,它允许开发人员定义自定义的相等行为。通过覆盖此方法,开发人员可以指定类的实例如何被比较以判断相等性。实现 _eq_() 的语法很简单,并且它提供了灵活性,可以根据类的需求定义自定义的比较逻辑。让我们通过一些示例来深入了解语法并更好地理解其应用。 语法 示例 输出 True (equal) False (not equal) 说明 在此示例中,我们定义了一个 Person 类,并自定义了 _eq_() 方法,以便根据姓名和年龄属性比较两个实例。当我们比较 person1 和 person2 时,它们都有相同的姓名(“Alice”)和年龄(30),因此自定义相等性比较返回 True,表明它们相等。但是,当我们比较 person1 和 person3 时,它们的姓名或年龄不同,导致 False 评估,表明它们不相等。 示例 2 输出 True (equal) False (not equal) 说明 在此示例中,我们定义了一个 Product 类,并自定义了 _eq_() 方法,以便根据名称和价格属性比较两个实例。当我们比较 product1 和 product2 时,它们都有相同的名称(“PC”)和价格(1000),因此自定义相等性比较返回 True,表明它们相等。但是,当我们比较 product1 和 product3 时,它们的名称或价格不同,导致 False 评估,表明它们不相等。 is 运算符:对象身份比较 在 Python 中,is 运算符用于对象身份比较。它检查两个对象是否引用相同的内存地址,表明它们是同一个对象。与比较对象值的 == 运算符不同,is 运算符比较对象的身份。这种区别非常重要,尤其是在处理可变对象和身份检查时。让我们深入了解 is 运算符的使用,以更深入地理解对象身份比较。 Python 中的 is 运算符易于使用。如果两个变量引用同一个对象,它将评估为 True;否则,它将评估为 False。这是一个展示 is 运算符用法的简单示例 示例 输出 True False (different objects) 说明 在此示例中,我们有一个列表 a,包含 [1, 2, 3]。然后,我们将 a 赋值给 b,使 b 引用与 a 相同的列表对象。因此,当我们使用 is 运算符比较 a 和 b 时,它的评估结果为 True,表明它们在内存中引用同一个对象。但是,当我们创建一个具有与 a 相同元素的列表 c 时,它是内存中的一个不同对象。因此,当我们使用 is 比较 a 和 c 时,它的评估结果为 False,表明它们是不同的对象。 示例 2 输出 True False (different objects) 说明 在此示例中,a 和 b 引用同一个列表对象,因此 is 运算符评估为 True。但是,当我们使用切片创建一个 a 的浅拷贝 c 时,c 成为一个不同的列表对象,尽管它包含与 a 相同的元素。因此,当我们使用 is 比较 a 和 c 时,它的评估结果为 False,表明它们是不同的对象。 == 运算符:值比较 与检查对象身份的 is 运算符不同,== 运算符用于值比较。它比较对象的内容,以根据其定义的相等规则确定它们是否相等。对于整数、字符串和列表等内置类型,== 会比较对象的值。这是一个展示 == 运算符用法的示例 示例 输出 True (same width and height) False (different width or height) 说明 在此示例中,我们定义了一个 Rectangle 类来表示具有宽度和高度属性的矩形。由于我们没有定义自定义的 _eq_() 方法,== 运算符通过比较实例的值来执行值比较。当我们比较 rect1 和 rect2 时,它们都具有相同的宽度(10)和高度(20),因此值比较返回 True,表明它们相等。但是,当我们比较 rect1 和 rect3 时,它们的宽度或高度不同,导致 False 评估,表明它们不相等。 示例 2 输出 True (same coordinates) False (different coordinates) 说明 在此示例中,Point 类表示具有 x 和 y 坐标的 2D 平面上的点。由于我们没有定义自定义的 _eq_() 方法,== 运算符通过比较实例的属性来执行值比较。当我们比较 point1 和 point2 时,它们都具有相同的 x (1) 和 y (2) 坐标,因此值比较返回 True,表明它们相等。但是,当我们比较 point1 和 point3 时,它们的坐标不同,导致 False 评估,表明它们不相等。 下一主题Python 字节码反汇编器 |
首字母缩略词介绍 缩略语通常在 Python 中使用,以使更长、更冗长的表达或技术术语更简洁。它们通常通过取句子中每个单词的首字母来形成单个字符串。这些缩略语可以使...
11 分钟阅读
引言 数据处理和计算机编码与数据科学及其他分析方法密不可分。随着 Python 库数量的不断增长,这门语言为数据处理等任务提供了强大的武器库,而这些任务传统上是 Pandas 的基准。Panda 是一个非常多功能的...
7 分钟阅读
Python 提供了通过索引列表的简单过程来访问 Python 列表中元素的简单解决方案。可以使用索引号和 [] 方括号来访问列表的元素。但是,我们不能使用此方法...
5 分钟阅读
布隆过滤器是一种数据结构,可用于有效地检查一个元素是否在一个集合中。对于避免误报的应用,例如网络爬行、拼写检查或缓存,它们可能非常有用。但是,布隆过滤器有一个重要的...
阅读9分钟
?简介:在本教程中,我们将学习如何在 Python 中实现 KNN 算法。KNN 是一种简单的监督机器学习 (ML) 算法。监督学习可用于分类或回归,并经常用于缺失值插补。KNN 算法是基于...
阅读 6 分钟
介绍:在本教程中,我们将学习如何在 Python 中读写 XML 文件。XML 或可扩展标记语言是一种专门的语言,旨在易于人类和计算机解释。一种语言描述了以特定格式编码数据的过程。XML...
7 分钟阅读
? 计算加权平均是信息评估中的一项常见任务,其中特定值对最终平均值的贡献不均。Pandas 是 Python 中一个强大的数据处理库,提供了简单而有效的方法来计算加权平均。本文将指导您完成...
5 分钟阅读
? Bash 脚本 Bash 脚本,通常简称为“Bash”;是一种强大而灵活的脚本语言,广泛用于 Unix 和类 Unix 系统,如 Linux。Bash 作为 Bourne shell 的替代品而诞生,已发展成为一种广泛采用的任务自动化工具,...
阅读 10 分钟
引言 Python以其简洁性和可读性而闻名;它具有许多使开发人员喜欢它的特性。其一个通常被忽视但对于理解和使用Python函数至关重要的特性是函数签名。函数...
7 分钟阅读
简介:在本教程中,我们将学习有关. 图像归一化是改变图像像素值的过程,以使图像更令人满意。图像归一化用于增加图像之间的对比度,有助于改进...
7 分钟阅读
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India