问题
你的程序已经出现一大堆已无法直视的硬编码切片下标,然后你想清理一下字段(比如问价或者类似格式)
解决方案
假定你有一段代码要求从一个记录字符串中几个固定位置提出特定的数字端(比如文件或类似格式):
recode='....................100........513.25....................'
cost=int(recode[20:23])*float(recode[31:37])
print(cost) # 51325.0
与其那样写,为什么不想这样命名 切片呢:
SHARES=slice(20,23)
PRICE=slice(31,37)
cost=int(recode[SHARES])*float(recode[PRICE])
第二种版本中,你避免了大量无法理解的硬编码下标,使得你的代码更加清晰可读了。
讨论
一般来讲,代码中如果出现大量的硬编码下标值会使得可读性和可维护性大大降低。比如,如果你回过来看看一年前你写的代码,你会摸着脑袋想那时候自己到底想干什么呢。这里的解决方案是一个很简单的方法让你更加清晰的表达代码到底要干什么。
内置slice()函数创建了一个切片的对象,可以被用在任何切片允许使用的地方。
items=[0,1,2,3,4,5,6]
a=slice(2,4)
print(items[a]) # ->[2, 3]
print(items[2:4]) # ->[2, 3]
items=[0,1,10,11,4,5]
del items[a]
print(items) # ->[0, 1, 4, 5]
如果你有一个切片对象a,你可以分别调用它的a.start,a.stop,a.step属性来获取更多的信息。比如:
a=slice(2,50,2)
print(a.stop) #->50
print(a.start) # -> 2
print(a.step) #->2
另外,你还能通过调用切片的indices(size)方法将它映射到一个确定大小的序列上。这个方法返回一个三元组(start,stop,step),所有值都会被合适的缩小以满足边界限制,从而使用时避免出现INdexError异常。比如
a=slice(5,50,2)
s='HelloWorld' # ->(5, 10, 2)
print(a.indices(len(s)))
for i in range(*a.indices(len(s))):
print(s[i])
'''
W
r
d
'''
本文介绍了如何在Python中使用命名切片提升代码可读性。通过创建和使用slice()函数,可以避免硬编码的下标,使代码更易于理解和维护。切片对象的start, stop, step属性提供了更多信息,而indices()方法则能确保切片在特定大小的序列上不会引发IndexError。"
92224662,8447616,理解Observer模式:Java实现与应用,"['设计模式', 'Java', 'Observer接口', '发布-订阅模式', '注解编程']
130

被折叠的 条评论
为什么被折叠?



