我正在尝试编写一个 BitArray 类,如果有类似 numpy 的数组,x[i:j:k] = val
.
我将如何用 Python 编写这个?不与__setslice__
,对吗?因为这只需要三个参数,而我需要一个来四个。
__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))
__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))
.