[Python-Dev] PEP 303: Extend divmod() for Multiple Divisors

Guido van Rossum guido@python.org
Wed, 01 Jan 2003 08:56:25 -0500


> > I find
> > 
> >   mm, ss = divmod(ss, 60)
> > 
> > easier to read than
> > 
> >   mm, ss = ss//60, ss%60
> 
> Before I retract completely, I have a small addition.
> 
>    mm = ss//60; ss %= 60
> 
> is very readable to me, very efficient, and doesn't use
> extra tuples.

A good optimizing compiler could also get rid of extra tuples.

> It is also 2 characters shorter than the
> divmod version (both with the usual spacing, of course).

Shame on you.  Would you rather write Perl? :-)

> On the other hand, divmod clearly says what is going to
> happen, and in fact it is a higher level approach.

Yes.

> On dropping features, I came to this in the morning:
> 
> You said you might optimize certain builtins by the
> compiler, instead of removing divmod.
> 
> How about this:
> If divmod is supported by the compiler, there isn't
> any reason to keep it as a compiled C module. Instead,
> divmod could be a piece of Python code, which is
> injected into builtins somewhere at startup time.
> Since he compiler supports it, it just needs to be
> there at all, but does not need to waste space in
> the Python executable.

But what about long division, where divmod can (in extreme cases)
really save time by doing the division only once?

> I'm not saying this just to fight divmod out of the
> language. This is ridiculous. But in the long term,
> there might be quite a lot of redundancy introduced
> by enhanced versions of the compiler. Instead of
> letting the code grow on and on, I'd like to propose
> some shrinking attempt like in this case.
> If the compiler eats 95 percent of calls to some code
> already, I believe it makes sense to replace that
> piece of code by Python code and drop the C version.
> 
> The smaller the C code base, the better for Python.
> Less static code also improves the effect of compilers
> like Psyco. Let's make a smaller and better kernel.
> Get rid of ballast and have less code to maintain.

Let's first make some steps towards the better compiler I alluded to.
Then we can start cutting.

> This is a real wish and *no* Silvester joke :-)

If only I knew what Silvester was.  Is it a German holiday celebrating
the invention of root beer? :-)

--Guido van Rossum (home page: http://www.python.org/~guido/)