9

我正在尝试编写一个 BitArray 类,如果有类似 numpy 的数组,x[i:j:k] = val.

我将如何用 Python 编写这个?不与__setslice__,对吗?因为这只需要三个参数,而我需要一个来四个。

4

2 回答 2

6

__setslice__已弃用 - 您需要使用__setitem__slice 参数。

请注意,根据Python 文档,切片只能以以下语法形式完成: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))
于 2012-08-24T00:03:32.047 回答
1

__setslice__已弃用,请参阅Python 3 更改日志

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

同样,您可以传递一个 step 值,slice()这意味着语法a[i:j:k]转换为a.__getitem__(slice(i, j, k)).

于 2012-08-24T00:03:08.410 回答