1.11命名切片

本文介绍了如何在Python中使用命名切片提升代码可读性。通过创建和使用slice()函数,可以避免硬编码的下标,使代码更易于理解和维护。切片对象的start, stop, step属性提供了更多信息,而indices()方法则能确保切片在特定大小的序列上不会引发IndexError。" 92224662,8447616,理解Observer模式:Java实现与应用,"['设计模式', 'Java', 'Observer接口', '发布-订阅模式', '注解编程']

问题

​ 你的程序已经出现一大堆已无法直视的硬编码切片下标,然后你想清理一下字段(比如问价或者类似格式)

解决方案

​ 假定你有一段代码要求从一个记录字符串中几个固定位置提出特定的数字端(比如文件或类似格式):

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
'''   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值