On Sun, Jul 18, 2010 at 3:12 PM, Petre Galan <petre.ga...@gmail.com> wrote:
> PyNumber_Long is the right interface as it's the right way to do it.
> PyNumber_Index allows me to compute a value as index in slicing, value that
> may be different that the integer behaviour of object. PyNumber_Index is 
> serving
> it's purpose as index in slicing, beyond that it's getting abused.
> As for related discussions, float should not implement nb_int slot but be
> resolved in int's constructor.

What's your basis for making that assertion? As one of the devs
involved in adding PyNumber_Index and getting it to work properly, I
like to think I have some idea as to the purpose of the slot.

nb_int = can be coerced to int, but may lose numerical precision in the process
nb_index = can be coerced to int without losing numerical precision
(used for indexing, slicing and sequence repetition)

It's somewhat unintuitive, but that's backwards compatibility for you.

To quote the relevant part of PEP 357:

    Why not use nb_int which is already there?

    The nb_int method is used for coercion and so means something
    fundamentally different than what is requested here.  This PEP
    proposes a method for something that *can* already be thought of as
    an integer communicate that information to Python when it needs an
    integer.  The biggest example of why using nb_int would be a bad
    thing is that float objects already define the nb_int method, but
    float objects *should not* be used as indexes in a sequence.

    Why the name __index__?

    Some questions were raised regarding the name __index__ when other
    interpretations of the slot are possible.  For example, the slot
    can be used any time Python requires an integer internally (such
    as in "mystring" * 3).  The name was suggested by Guido because
    slicing syntax is the biggest reason for having such a slot and
    in the end no better name emerged. See the discussion thread:
    http://mail.python.org/pipermail/python-dev/2006-February/thread.html#60594
    for examples of names that were suggested such as "__discrete__" and
    "__ordinal__".


So, what spec are you using to say that you're right and I'm wrong?

(Now, I'd agree the documentation is a little lacking in this area, as
the docs for operator.index, PyNumber_Index and __index__ don't
explain very well how they differ semantically from int, PyNumber_Int
and __int__, but that's a separate issue. PEP 357 explains the intent
quite clearly, even if the published documentation doesn't do so)

Cheers,
Nick.

-- 
Nick Coghlan   |   ncogh...@gmail.com   |   Brisbane, Australia
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to