Contents
  1. 1. 0x00 切片对象
  2. 2. 0x01 用法

0x00 切片对象

切片是可迭代对象中的一个常见而又强大的用法,像这样s[a:b:c]的用法是十分常见的。但是这样的用法可读性不高。因为 a, b, c 都是数字,看起来完全不知道你在提取什么信息,也十分不优雅。这样,我们的切片对象就应运而生了。

The notation a:b:c is only valid within [] when used as the indexing or subscript
operator, and it produces a slice object: slice(a, b, c).As we will see in “How Slicing
Works” on page 281, to evaluate the expression seq[start:stop:step], Python calls
seq.__getitem__(slice(start, stop, step)).
对应书第34页

0x01 用法

这里说的是我们可以用slice(a, b, c)这样的 slice 对象来取代[a:b:c]这种写法。像下面这样:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
>>> invoice = """
... 0.....6.................................40........52...55........
... 1909 Pimoroni PiBrella $17.50 3 $52.50
... 1489 6mm Tactile Switch x20 $4.95 2 $9.90
... 1510 Panavise Jr. - PV-201 $28.00 1 $28.00
... 1601 PiTFT Mini Kit 320x240 $34.95 1 $34.95
... """
>>> SKU = slice(0, 6)
>>> DESCRIPTION = slice(6, 40)
>>> UNIT_PRICE = slice(40, 52)
>>> QUANTITY = slice(52, 55)
>>> ITEM_TOTAL = slice(55, None)
>>> line_items = invoice.split('\n')[2:]
>>> for item in line_items:
... print(item[UNIT_PRICE], item[DESCRIPTION])
...
$17.50 Pimoroni PiBrella
$4.95 6mm Tactile Switch x20
$28.00 Panavise Jr. - PV-201
$34.95 PiTFT Mini Kit 320x240

如此,用一个 个 slice 对象来取代以前的切片方法,是不是优雅又美观?同样也方便日后修改,这样的方法在读取记录的时候十分有用。

Contents
  1. 1. 0x00 切片对象
  2. 2. 0x01 用法