[Python-Dev] Changing the Division Operator -- PEP 238, rev 1.12

Ka-Ping Yee ping@lfw.org
Fri, 27 Jul 2001 16:37:08 -0700 (PDT)

This all looks pretty good!  Nice work, Guido -- especially given the
minefield of compatibility issues you have been tiptoeing through.

On Fri, 27 Jul 2001, Guido van Rossum wrote:
>     - Overloaded operator methods:
>       __div__(), __floordiv__(), __truediv__();

I'm concerned about this.  Does this mean that a/b will call __truediv__?
So code that today expects a/b to call __div__ will be permanently broken?

I think you might want to provide a little table in the PEP.  Here is my
stab at describing the current proposal, so you can correct it:

                  in Python 2.1     in Python 2.2         in Python 3.0 [*]

 / on numbers     classic division  classic division      true division
 // on numbers    nothing           floor division        floor division

 / on instances   __div__           __div__               __truediv__?
 // on instances  nothing           __floordiv__?         __floordiv__

 / API call       PyNumber_Divide   PyNumber_Divide       PyNumber_TrueDivide?
 // API call      nothing           PyNumber_FloorDivide  PyNumber_FloorDivide

 / AsNumber slot  nb_divide         nb_divide             nb_true_divide?
 // AsNumber slot nothing           nb_floor_divide       nb_floor_divide

 // opcode        nothing           BINARY_FLOOR_DIVIDE   BINARY_FLOOR_DIVIDE

 [*] or in Python >= 2.2 with "from __future__ import division"

I'm thinking that nb_true_divide and __truediv__ should be replaced with
just nb_divide and __div__ in the above table.

> Semantics of Floor Division
>     For complex numbers, // raises an exception, since float() of a
>     complex number is not allowed.

I assume you meant "floor()" here rather than "float()".

-- ?!ng