BitArrayクラスを記述しようとしていますが、numpyの配列x[i:j:k] = val
のようなものを持つのは面白いでしょう。Pythonの拡張スライス?
これをPythonでどのように書きますか? __setslice__
ではなく、そうですか?それは3つの引数しか取らないので、4つを取るためには1つの引数が必要です。
BitArrayクラスを記述しようとしていますが、numpyの配列x[i:j:k] = val
のようなものを持つのは面白いでしょう。Pythonの拡張スライス?
これをPythonでどのように書きますか? __setslice__
ではなく、そうですか?それは3つの引数しか取らないので、4つを取るためには1つの引数が必要です。
__setslice__
は推奨されていません。__setitem__
にslice引数を使用します。
Python documentationごとに、スライスは、a[i:j:step]
,a[i:j, k:l]
、またはa[..., i:j]
の構文形式でのみ実行できることに注意してください。コロンベースの構文は、単一のスライスオブジェクトを定義するために使用されますが、2番目の例で示すように、複数のスライス引数を持つことができます(スライスのタプルとして渡されます)。あなたは合格するかどう四つの引数
>>> 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'を実装することがかなり難しい場合は、スライスオブジェクトの他には文書化されていない' indices'メソッドを文書化します。 –
__setslice__
は廃止され、Python 3 changelogを参照してください。
__getslice__()
、__setslice__()
と__delslice__()
が殺されました。a[i:j]
の構文は、a.__getitem__(slice(i, j))
(またはそれぞれ割り当てまたは削除ターゲットとして使用される場合は__setitem__()
または__delitem__()
)に変換されます。
同様に、あなたはa[i:j:k]
がa.__getitem__(slice(i, j, k))
に変換構文を意味slice()
にステップ値を渡すことができます。
:ここ
は、その形態を参照して、
key
引数を出力する例ですか? – cyroxx