Python算法详解
上QQ阅读APP看书,第一时间看更新

2.1.6 命名切片

在Python程序中,有时会发现编写的代码变得杂乱无章而无法阅读,到处都是硬编码的切片索引,此时需要将它们清理干净。如果代码中存在过多硬编码的索引值,将会降低代码的可读性和可维护性。很多开发者都会有这样的经验,几年以后回过头看自己以前编写的代码,会发现自己当初编写这些代码是多么幼稚而不合理。

在Python程序中,使用函数slice()可以实现切片对象,能够在切片操作函数中实现参数传递功能,可以被用在任何允许进行切片操作的地方。使用函数slice()的语法格式如下所示。

class slice(stop)
class slice(start, stop[, step])

· start:起始位置。

· stop:结束位置。

· step:间距。

下面的实例文件qie.py演示了使用函数slice()实现切片操作的过程。

源码路径:daima\第2章\qie.py

items = [0, 1, 2, 3, 4, 5, 6]
a = slice(2, 4)
print(items[2:4])
print(items[a])
items[a] = [10, 11]
print(items)
print(a.start)
print(a.stop)
print(a.step)
s = 'HelloWorld'
①print(a.indices(len(s)))
for i in range(*a.indices(len(s))):
      print(s[i])

在上述代码中,slice对象实例s可以分别通过属性s.start、s.stop和s.step来获取该对象的信息。在①处使用indices(size)函数将切片映射到特定大小的序列上,这将会返回一个(start, stop, step)元组,所有的值都已经正好限制在边界以内,这样当进行索引操作时可以避免出现IndexError异常。执行结果如图2-9所示。

图2-9 执行结果