PEP 276 Simple Iterator for ints (fwd)
David Eppstein
eppstein at ics.uci.edu
Mon Dec 10 14:41:30 EST 2001
In article <3C150188.C31AC4B8 at ccvcorp.com>,
Jeff Shannon <jeff at ccvcorp.com> wrote:
> (I still strongly dislike the proposed notation, though.... Maybe
> it's a style thing--I'd usually much rather have a clear function call
> than clever operator tricks.)
The two objections I have to the current "clear function call" (range and
friends) are first, you can't understand it unless you crack that manual
and have it tell you what the arguments mean and what the difference is
between range and xrange, which is no good for writing code that
non-Python-literate programmers can quickly and easily understand, and
second, even for Pythonists, it doesn't lead to clear code unless what you
need is half-open-on-the-right intervals with integer bounds, which only
cover some of the uses of range.
For example, suppose you want to loop over the set of integers i satisfying
x <= i < y (the usual half-open interval), but you need them in reverse
order, and x and y may be non-integer. As far as I can tell, the "one
right way" of doing this is
import math
for i in range(int(math.ceil(y-1)),int(math.ceil(x-1)),-1): ...
Despite having some idea how range works I checked this in the interpreter
and had to correct multiple mistakes: forgot the "math.", misspelled "ceil"
as "ceiling", and incorrectly used floor(x+1) instead of ceil(x-1) in the
second argument. And there's still a possible bug when integer unification
comes around and makes long an acceptable argument for a range. This is a
"clear function call" compared to
for y > i >= x: ...
?
--
David Eppstein UC Irvine Dept. of Information & Computer Science
eppstein at ics.uci.edu http://www.ics.uci.edu/~eppstein/
More information about the Python-list
mailing list