《Python Cookbook(第3版)中文版》——1.11 对切片命名

简介:

本节书摘来自异步社区《Python Cookbook(第3版)中文版》一书中的第1章,第1.11节,作者[美]David Beazley , Brian K.Jones,陈舸 译,更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.11 对切片命名

1.11.1 问题

我们的代码已经变得无法阅读,到处都是硬编码的切片索引,我们想将它们清理干净。

1.11.2 解决方案

假设有一些代码用来从字符串的固定位置中取出具体的数据(比如从一个平面文件或类似的格式):

######    0123456789012345678901234567890123456789012345678901234567890'
record = '....................100 .......513.25 ..........'
cost = int(record[20:32]) * float(record[40:48])

与其这样做,为什么不对切片命名呢?

SHARES = slice(20,32)
PRICE = slice(40,48)

cost = int(record[SHARES]) * float(record[PRICE])

在后一种版本中,由于避免了使用许多神秘难懂的硬编码索引,我们的代码就变得清晰了许多。

1.11.3 讨论

作为一条基本准则,代码中如果有很多硬编码的索引值,将导致可读性和可维护性都不佳。例如,如果一年以后再回过头来看代码,你会发现自己很想知道当初编写这些代码时自己在想些什么。前面展示的方法可以让我们对代码的功能有着更加清晰的认识。

一般来说,内置的slice()函数会创建一个切片对象,可以用在任何允许进行切片操作的地方。例如:

>>> items = [0, 1, 2, 3, 4, 5, 6]
>>> a = slice(2, 4)
>>> items[2:4]
[2, 3]
>>> items[a]
[2, 3]
>>> items[a] = [10,11]
>>> items
[0, 1, 10, 11, 4, 5, 6]
>>> del items[a]
>>> items
[0, 1, 4, 5, 6]

如果有一个slice对象的实例s,可以分别通过s.start、s.stop以及s.step属性来得到关于该对象的信息。例如:

>>> a = slice(
>>> a.start
10
>>> a.stop
50
>>> a.step
2
>>>

此外,可以通过使用indices(size)方法将切片映射到特定大小的序列上。这会返回一个(start, stop, step)元组,所有的值都已经恰当地限制在边界以内(当做索引操作时可避免出现IndexError异常)。例如:

>>> s = 'HelloWorld'
>>> a.indices(len(s))
(5, 10, 2)
>>> for i in range(*a.indices(len(s))):
... print(s[i])
...
w
r
d
>>>
相关文章
|
2月前
|
网络协议 IDE Java
Python 为什么推荐蛇形命名法?
Python 为什么推荐蛇形命名法?
13 0
|
4月前
|
存储 IDE 开发工具
【python原理】Python 3里面print为什么改成函数?为什么会有个奇怪的“...”对象?为什么推荐蛇形命名法?等常见问题
【python原理】Python 3里面print为什么改成函数?为什么会有个奇怪的“...”对象?为什么推荐蛇形命名法?等常见问题
49 0
|
3月前
|
Python
python元组切片
python元组切片
69 3
|
1月前
|
数据挖掘 C语言 索引
Python生成列表切片
Python生成列表切片
11 0
|
3月前
|
Java Python
【Python • 字符串】巧用python字符串切片
【Python • 字符串】巧用python字符串切片
51 0
|
3月前
|
索引 Python 数据处理
【Python Numpy教程】切片和索引
【Python Numpy教程】切片和索引
【Python Numpy教程】切片和索引
|
3月前
|
存储 索引 Python
【Python基础】数据容器的切片操作和集合
【Python基础】数据容器的切片操作和集合
|
4月前
|
索引 Python
python切片操作
python切片操作
23 0
|
4月前
|
算法 Java Shell
python命名基础
python命名基础
44 0
|
4月前
|
前端开发 索引 Python
Python 教程之 Numpy(7)—— 基本切片和高级索引
Python 教程之 Numpy(7)—— 基本切片和高级索引
45 1