[Python-ideas] Pass a function as the argument "step" of range()
Steven D'Aprano
steve at pearwood.info
Sat Jul 4 05:58:39 CEST 2015
On Thu, Jul 02, 2015 at 10:20:16PM +0200, Pierre Quentel wrote:
> Both stress that range is most often used in a for loop (it doesn't
> "happens to sometimes be used" in for loops, and is rarely used for
> membership testing).
You have misunderstood me. I'm not saying that range necessarily has
many widespread and common uses outside of for-loops, but that for-loops
only sometimes use range. Most loops iterate directly over the iterable,
they don't use a range object at all.
You started this thread with an example from Javascript. For loops in
Javascript can be extremely general:
js> for(var i=1,j=0,k=2; i < 100; j=2*i, k-=1, i+=j+k){print([i,j,k])}
1,0,2
4,2,1
12,8,0
35,24,-1
Why try to force all that generality into the range function?
There are really two issues here:
(1) Is there a problem with Python that it cannot easily or reasonable
perform certain for-loops that Javascript makes easy?
(2) Is modifying range() the right way to solve that problem?
I don't think you have actually demonstrated the existence of a problem
yet. True, Javascript gives you a nice, compact, readable syntax for
some very general loops, but Python has its own way of doing those same
loops which may not be quite as compact but are probably still quite
acceptable.
But even if we accept that Javascript for-loops are more powerful, more
readable, and more flexible, and that Python lacks an acceptable way of
performing certain for-loops that Javascript makes easy, changing
range does not seem to be the right way to fix that lack.
--
Steve
More information about the Python-ideas
mailing list