9. slice对象和切片重载
什么是切片对象
切片对象(slice)是一种用于从序列类型(如列表、字符串、元组等)中提取子序列的操作。它通过指定 start、stop 和 step 参数来截取序列的一部分,
切片语法为:
序列 [start:stop:step]
示例:
lst = [1, 2, 3, 4, 5, 6, 7]
print(lst[1:6:2] # 其中 1:6:2 就是创建切片对象
切片对象的创建
slice函数
函数
说明
slice(start=None, stop=None, step=None)
创建一个slice切片对象。
slice 对象的属性
- start 切片的起始值,默认为None
- stop 切片的终止值,默认为None
- step 切片的步长,默认为None
切片运算符重载
作用
让自定义类型的对象能够支持切片操作。
索引运算符重载的方法:
方法名
运算符和表达式
说明
__getitem__(self, item)
x = self[item]
切片取值
__setitem__(self, key, value)
self[key] = value
切片的赋值
__delitem__(self, key)
del self[key]
del语句删除切片
索引和切片运算符重载使用相同的方法。
示例
# 切片运算符重载 示例
class Vector3D:
'''用于描述三维向量的类!,x,y,z分别是向量的坐标位置!'''
def __init__(self, x, y, z):
self.x, self.y, self.z = x, y, z
def __repr__(self):
return f'Vector3D({self.x},{self.y},{self.z})'
def __getitem__(self, item):
print('__getitem__, item:', item)
if isinstance(item, int):
print('正在执行索引取值操作:')
elif isinstance(item, slice):
print('正在执行切片取值操作:')
print('起始值,start:', item.start)
print('终止值,stop:', item.stop)
print('步长,step:', item.step)
def __setitem__(self, key, value):
print(f'__setitem__, key: {key}, value: {value}')
def __delitem__(self, key):
print(f'__delitem__, key: {key}')
v1 = Vector3D(1, 2, 3)
print('v1:', v1)
# value = v1[1:100:2]
value = v1[::2]
运行结果
v1: Vector3D(1,2,3)
__getitem__, item: slice(None, None, 2)
正在执行切片取值操作:
起始值,start: None
终止值,stop: None
步长,step: 2