问题
如果你的程序包含了大量无法直视的硬编码切片,并且你想清理一下代码。
解决方案
假定你要从一个记录(比如文件或其他类似格式)中的某些固定位置提取字段:
record = '....................100 .......513.25 ..........'
cost = int(record[20:23]) * float(record[31:37])
print(cost)
51325.0
与其那样写,为什么不想这样命名切片呢:
SHARES = slice(20, 23)
PRICE = slice(31, 37)
cost = int(record[SHARES]) * float(record[PRICE])
print(cost)
51325.0
通过命名切片,避免了使用大量难以理解的硬编码下标,代码更加清晰可读。
讨论
一般来讲,代码中如果出现大量的硬编码下标会使得代码的可读性和可维护性大大降低。
内置的 slice()
函数创建了一个切片对象。所有使用切片的地方都可以使用切片对象。比如:
items = [0, 11, 22, 33, 44, 55, 66, 77]
a = slice(2, 4)
# 取数
print(items[a])
print(items[2:4])
[22, 33]
[22, 33]
# 赋值
items[a] = [100, 200]
print(items)
[0, 11, 100, 200, 44, 55, 66, 77]
# 删除
del items[a]
print(items)
[0, 11, 44, 55, 66, 77]
如果有一个切片对象a,可以分别调用它的 a.start , a.stop , a.step 属性来获取更多的信息。比如:
a = slice(5, 50, 4)
print(a.start)
print(a.stop)
print(a.step)
5
50
4
网友评论