我正在尝试编写一个BitArray类,拥有像numpy的数组x[i:j:k] = val
这样的东西会很有用。
我怎么用Python写这个?不是__setslice__
,对吧?因为这只需要三个参数,我需要一个参数。
答案 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))
。