[Python-Dev] PEP for adding an sq_index slot so that any object, a or b, can be used in X[a:b] notation
Brett Cannon
brett at python.org
Thu Feb 9 23:32:47 CET 2006
Looks good to me. Only change I might make is mention why __int__
doesn't work sooner (such as in the rationale). Otherwise +1 from me.
-Brett
On 2/9/06, Travis E. Oliphant <oliphant.travis at ieee.org> wrote:
>
> Attached is an updated PEP for 357. I think the index concept is better
> situated in the PyNumberMethods structure. That way an object doesn't
> have to define the Sequence protocol just to be treated like an index.
>
> -Travis
>
>
> PEP: 357357357
> Title: Allowing any object to be used for slicing
> Version: Revision 1.2
> Last Modified: 02/09/2006
> Author: Travis Oliphant <oliphant at ee.byu.edu>
> Status: Draft
> Type: Standards Track
> Created: 09-Feb-2006
> Python-Version: 2.5
>
> Abstract
>
> This PEP proposes adding an nb_as_index slot in PyNumberMethods and
> an __index__ special method so that arbitrary objects can be used
> in slice syntax.
>
> Rationale
>
> Currently integers and long integers play a special role in slice
> notation in that they are the only objects allowed in slice
> syntax. In other words, if X is an object implementing the sequence
> protocol, then X[obj1:obj2] is only valid if obj1 and obj2 are both
> integers or long integers. There is no way for obj1 and obj2 to
> tell Python that they could be reasonably used as indexes into a
> sequence. This is an unnecessary limitation.
>
> In NumPy, for example, there are 8 different integer scalars
> corresponding to unsigned and signed integers of 8, 16, 32, and 64
> bits. These type-objects could reasonably be used as indexes into
> a sequence if there were some way for their typeobjects to tell
> Python what integer value to use.
>
> Proposal
>
> Add a nb_index slot to PyNumberMethods, and a corresponding
> __index__ special method. Objects could define a function to
> place in the sq_index slot that returns an appropriate
> C-integer for use as ilow or ihigh in PySequence_GetSlice,
> PySequence_SetSlice, and PySequence_DelSlice.
>
> Implementation Plan
>
> 1) Add the slots
>
> 2) Change the ISINT macro in ceval.c to ISINDEX and alter it to
> accomodate objects with the index slot defined.
>
> 3) Change the _PyEval_SliceIndex function to accomodate objects
> with the index slot defined.
>
> Possible Concerns
>
> Speed:
>
> Implementation should not slow down Python because integers and long
> integers used as indexes will complete in the same number of
> instructions. The only change will be that what used to generate
> an error will now be acceptable.
>
> Why not use nb_int which is already there?
>
> The nb_int, nb_oct, and nb_hex methods are used for coercion.
> Floats have these methods defined and floats should not be used in
> slice notation.
>
> Reference Implementation
>
> Available on PEP acceptance.
>
> Copyright
>
> This document is placed in the public domain
>
>
>
>
>
> _______________________________________________
> Python-Dev mailing list
> Python-Dev at python.org
> http://mail.python.org/mailman/listinfo/python-dev
> Unsubscribe: http://mail.python.org/mailman/options/python-dev/brett%40python.org
>
>
>
More information about the Python-Dev
mailing list