我正在嘗試寫一個BitArray類,它會很漂亮,像numpy的數組,x[i:j:k] = val
。python中的擴展切片?
我該如何在Python中編寫它?不與__setslice__
,對不對?因爲這隻需要三個參數,我需要一個取四個。
我正在嘗試寫一個BitArray類,它會很漂亮,像numpy的數組,x[i:j:k] = val
。python中的擴展切片?
我該如何在Python中編寫它?不與__setslice__
,對不對?因爲這隻需要三個參數,我需要一個取四個。
__setslice__
已棄用 - 您需要使用帶有slice參數的__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))
http://docs.python.org/release/2.3.5/whatsnew/section-slices.html底部有一些示例代碼,實際上這些代碼對於這些目的仍然有用;它(或多或少)記錄了「切片」對象的另外未記錄的「索引」方法,沒有這些方法在切片上實現完全通用的「setitem」相當困難。 –
__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))
。
什麼四個參數你想傳遞? – cyroxx