@songying
2018-07-14T12:11:31.000000Z
字数 805
阅读 1182
python高级特性
参考: 《流畅的python》 2.4
python中, 列表,元组,字符串都支持切片。
s[a:b:c] # s在a和b之间以c为间隔取值,c可为负,意味着反向取值
对 seq[start:stop:step] 进行求值的时候,Python 会调用seq.__getitem__(slice(start, stop, step))
。
在numpy中可以出现以下几种切片
a[i,j], a[m:n, k:l]
要正确处理这种 [] 运算符的话,对象的特殊方法 __getitem__
和 __setitem__
需要以元组的形式来接收a[i, j]
中的索引。也就是说,如果要得到 a[i, j]
的值,Python 会调用 a.__getitem__((i, j))
。
Python 内置的序列类型都是一维的,因此它们只支持单一的索引,成对出现的索引是没有用的。
实际上是Ellipsis对象的别名,而 Ellipsis 对象又是 ellipsis 类的单一实例,它可以当作切片规范的
一部分,也可以用在函数的参数清单中,比如f(a, ..., z)
,或a[i:...]
... # 这是英语句号,
如果赋值的对象是一个切片,那么赋值语句的右侧必须是个可迭代对象。即便只有单独一个值,也要把它转换成可迭代的序列。
l[3::2] = [11, 22]
del l[5:7]
__getitem__
__setitem__