Python Slice对象到Sequence序列对象
问题背景
最近在攻Numpy包,发现以下特别让我很疑惑,因为从python基础而来,终将又回到python中去:
- b、c数据类型分别为ndarray类、int类,value上b多了一个中括号;
- 经列表进行切片(slice)以及索引以后,返回不同的对象,分别是列表 list、 integer,在经过查询python doc以后发现这其中存在slice对象 slice对象:
切片与__getitem__方法联系
- [start:stop:step] 在python中就涉及到了切片操作 传递给__getitem__方法分别对应不同的参数,当索引是integer的时候,序列将索引当作元素在序列中位置,直接取数,涉及到切片的时候按照以下进行:
穿插点:slice对象、sequence对象
Slice对象:
- 在官方定义中,Slice对象经常包含序列的一部分,这样肯定不太理解,换个说法,在方括号中 数字之间有冒号,这里面就存在切片 slice
- 生成Slice类,slice(start,stop,step),或者slice(stop),上述例子已经给出,此处再多余说一个slice类的方法,indices(len)返回一个元组(start,stop,step)用于规整slice类中对于超出start、stop、step所定义区间的范围,换句话说超出区间的会被截掉:
sequence对象
- python中奉行一切皆对象,也存在许多鸭子类型,对于序列对象也不例外,只要实现了序列接口协议,我们也可以将其当作自定义序列对象:实现了__getitem__以及__len___
- 当初也是在研究list[index]的时候看python发生了什么,后来了解到当使用 x[key]的时候,内部就会调用x.getitem(key)这一特殊方法,所以接下来需要去深入__getitem__ 方法
番外知识点
+上述代码中使用了isinstance,一般来说我们是检查是否存在继承关系,在查看模块number.integral以及int类源代MRO关系如下:
- 在模块number中的integral类属于抽象类,因为Number继承自元类ABC,在integral源代码末尾将int注册为它的虚拟子类,这样int就可以去实现integral类中所定义的方法。官方对于虚拟子类重写isinstance方法
- 所以isinstance也不只是检查继承,还有抽象类虚拟子类之间的关系。
__EOF__

本文作者:ivan09
本文链接:https://www.cnblogs.com/ivan09/p/14206409.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/ivan09/p/14206409.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)