[Python-ideas] Deprecating the old-style sequence protocol
Nick Coghlan
ncoghlan at gmail.com
Sun Dec 27 02:48:05 EST 2015
On 27 December 2015 at 17:30, Serhiy Storchaka <storchaka at gmail.com> wrote:
> On 27.12.15 08:22, Nick Coghlan wrote:
>>
>> These days, without considering the presence or absence of any
>> non-dunder methods, the core distinction between sequences,
>> multi-dimensional arrays and arbitrary mappings really lies in the
>> type signature of the key parameter to__getitem__ et al (assuming a
>> suitably defined Index type hint):
>>
>> MappingKey = Any
>> DictKey = collections.abc.Hashable
>> SequenceKey = Union[Index, slice]
>> ArrayKey = Union[SequenceKey, Tuple["ArrayKey", ...]]
>
> ArrayKey also includes Ellipsis.
You're right, I was mistakenly thinking that memoryview implemented
tuple indexing without ellipsis support, but it actually doesn't
implement multi-dimensional indexing at all - once you cast to a
multi-dimensional shape, most forms of subscript lookup are no longer
permitted at all by the current implementation. So a more accurate
array key description would look like:
ArrayKey = Union[SequenceKey, type(Ellipsis), Tuple["ArrayKey", ...]]
(I spelled out Ellipsis to minimise confusion with the
tuple-as-frozen-list typing notation)
Cheers,
Nick.
--
Nick Coghlan | ncoghlan at gmail.com | Brisbane, Australia
More information about the Python-ideas
mailing list