当前位置: 首页 > news >正文

【Python】相等性比较运算(==, is)的学习笔记

1. 相等性比较运算:== & is

Python中有两种比较运算符==is
==is 的主要区别在于它们比较的对象属性不同:

  1. == 运算符:

    • 比较对象的值或内容是否相等。
    • 调用对象的 __eq__() 方法来进行比较。
    • 可以被重载(在自定义类中重新定义),以实现特定的相等性比较逻辑。
  2. is 运算符:

    • 比较对象的身份(identity),即检查两个引用是否指向内存中的同一个对象。
    • 比较对象的 ID,可以通过 id() 函数获取。
    • 不能被重载。

2. ==:用于比较数值的相等性

== 运算符的比较过程实际上相当复杂,涉及多个步骤和特殊情况;

2.1 调用 __eq__() 方法:

  1. 当使用 a == b 时,Python 首先检查左侧对象是否有 __eq__() 方法;如果有,它会调用a.__eq__(b),将右侧对象作为参数传入;
  2. 如果a.__eq__(b)返回NotImplemented,说明左侧对象没有 __eq__() 方法;Python 会检查右侧对象是否有 __eq__() 方法;
  3. Python 会尝试 b.__eq__(a)
  4. 如果两者都没有自定义的 __eq__() 方法,Python会进行类型检查;

2.2 类型检查对比

2.3.1 如果类型相同,Python 会比较对象的id(等同于使用 is 运算符)

2.3.2. 如果类型不同,需要查看是否是内置类型

  1. 数值类型比较:对于数字、字符串等内置类型,Python 会比较它们的值;
  2. 复合对象比较:对于复合对象(如列表、元组、字典),Python 会递归地比较它们的元素;
  3. 特殊情况处理:某些类型(如 float('nan'))有特殊的比较规则;
  4. 其它情况:类型不同,通常直接返回 False。
http://www.lryc.cn/news/465821.html

相关文章:

  • 智慧公厕厂家:智慧公厕建设推动城市公厕智能化变革
  • 大一计算机课程之线性代数
  • 什么是运动控制器?运动控制器的特点
  • [AWS]RDS数据库版本升级
  • (Golang)初识Go语言!!为什么选择Go?如何配置Go的开发环境?VS Code如何配置Go环境?
  • 【人工智能-初级】第15章 TensorFlow 和 PyTorch 的入门:深度学习的利器
  • git禁用 SSL 证书验证
  • C++之《剑指offer》学习记录(2):sizeof
  • linux线程 | 同步与互斥 | 线程池以及知识点补充
  • ArkTS 如何实现表单,地区选择效果
  • Vite 项目的核心配置- vite.config.ts 和 tsconfig.json 全解析
  • 如何使用JMeter进行性能测试的保姆级教程
  • Qt 实战(11)样式表 | 11.1、样式表简介
  • WebGl 多缓冲区和数据偏移
  • 基于SSM的甜品店销售管理系统
  • Spacetime Gaussian Feature Splatting for Real-Time Dynamic View Synthesis
  • PCL 基于FPFH特征描述子获取点云对应关系
  • 项目实战:Qt+OpenCV仿射变换工具v1.1.0(支持打开图片、输出棋盘角点、调整偏移点、导出变换后的图等等)
  • OpenCV坐标系统与图像处理案例
  • Unity之如何使用Unity Cloud Build云构建
  • Halcon开启多线程
  • Echarts 点击事件无法使用 this 或者 this绑定的数据无法获取
  • PCL 基于距离阈值去除错误对应关系(永久免费版)
  • DirectX 11 和 Direct3D 11 的关系
  • 什么是SCRM?为什么企业要做SCRM?
  • 类间方差,分割地物
  • 基于微博评论的自然语言处理情感分析
  • MFEM( Modular Finite Element Methods)是一个灵活的、可扩展的、开源的有限元库
  • 在VMware上创建虚拟机以及安装Linux操作系统,使用ssh进行远程连接VMware安装注意点 (包含 v1,v8两张网卡如果没有的解决办法)
  • 关于vue3中如何实现多个v-model的自定义组件