在python中扩展切片?

时间:2012-08-23 23:50:30

标签: python slice

我正在尝试编写一个BitArray类,拥有像numpy的数组x[i:j:k] = val这样的东西会很有用。

我怎么用Python写这个?不是__setslice__,对吧?因为这只需要三个参数,我需要一个参数。

2 个答案:

答案 0 :(得分:6)

不推荐使用

__setslice__ - 您需要将__setitem__与切片参数一起使用。

请注意,根据Python documentation,切片只能使用以下语法形式完成:a[i:j:step]a[i:j, k:l]a[..., i:j]。基于冒号的语法用于定义单个切片对象,但是第二个示例显示您可以有多个切片参数(它们作为切片元组传入)。

这是打印key参数的示例,以查看其形式:

>>> class Foo(object):
>>>     def __setitem__(self, key, value):
>>>         print key
>>> 
>>> a = Foo()
>>> a[1:1] = 1
slice(1, 1, None)
>>> 
>>> a[1:1:1] = 1
slice(1, 1, 1)
>>> 
>>> a[1:1, 1:1] = 1
(slice(1, 1, None), slice(1, 1, None))

答案 1 :(得分:1)

不推荐使用

__setslice__,请参阅Python 3 changelog

  

__getslice__()__setslice__()__delslice__()被杀。语法a[i:j]现在转换为a.__getitem__(slice(i, j))(或__setitem__()__delitem__(),分别用作转让或删除目标时。)

同样,您可以将步骤值传递给slice(),这意味着语法a[i:j:k]会转换为a.__getitem__(slice(i, j, k))