私はBitArrayクラスを書き込もうとしていますが、numpyの配列のようなものがあると便利x[i:j:k] = val
です。
これをPythonでどのように記述しますか?じゃない__setslice__
ですよね?それはたった3つの引数を取り、私は4つを取るために1つ必要だからです。
__setslice__
は非推奨です-__setitem__
スライス引数とともに使用する必要があります。
Pythonのドキュメントによると、スライスは次の構文形式でのみ実行できることに注意してください: a[i:j:step]
、、、a[i:j, k:l]
またはa[..., i:j]
。コロンベースの構文は、単一のスライスオブジェクトを定義するために使用されますが、2番目の例が示すように、複数のスライス引数を持つことができます(それらはスライスのタプルとして渡されます)。
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__
非推奨です。Python3の変更ログを参照してください。
__getslice__()
、__setslice__()
そして__delslice__()
殺されました。構文は次のa[i:j]
ように変換されますa.__getitem__(slice(i, j))
(または__setitem__()
、__delitem__()
割り当てまたは削除のターゲットとして使用される場合は、それぞれ)。
slice()
同様に、構文がa[i:j:k]
に変換されることを意味するステップ値を渡すことができますa.__getitem__(slice(i, j, k))
。