をスライスして拡張対基本的な私は、Python 2.7で奇妙な行動に気づいた:パイソン - スライスを使って実験すると
class A:
def __getitem__(self, i):
print repr(i)
a=A()
a[:] #Prints slice(0, 9223372036854775807, None)
a[::] #prints slice(None, None, None)
a[:,:] #prints (slice(None, None, None), slice(None, None, None))
カッコ内の1つのコロンを使用する場合は、スライスオブジェクトを開始し、として巨大な整数として0を持っています終わり。ただし、複数のコロンを使用すると、指定されていなければ、開始と停止はNoneになります。
この動作は保証されているか、実装固有ですか?
Documentationは、2番目と3番目のケースが拡張スライスであるとしていますが、最初のケースはスライディングではありません。しかし、私は基本と拡張スライスの違いについて明確な説明が見つかりませんでした。
__getitem__
を無効にして、拡張スライスを受け入れる場合は、私が知っておくべき他の「特殊なケース」がありますか? Pythonの2 [:]
については
Python 2.7では '2147483647'(2^31-1)となり、値はシステム固有のものです。 Python 3では、すべてのケースで 'None'を取得します。 –
'A'を新しいスタイルのクラスにすると' None'に変わります。 –