[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