9

私はBitArrayクラスを書き込もうとしていますが、numpyの配列のようなものがあると便利x[i:j:k] = valです。

これをPythonでどのように記述しますか?じゃない__setslice__ですよね?それはたった3つの引数を取り、私は4つを取るために1つ必要だからです。

4

2 に答える 2

6

__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))
于 2012-08-24T00:03:32.047 に答える
1

__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))

于 2012-08-24T00:03:08.410 に答える