[Python-Dev] Ranges
Paul Prescod
paul@prescod.net
Wed, 12 Jul 2000 12:25:36 -0500
Thomas Wouters wrote:
>
> > How's this for obfuscation:
>
> > [0:10][0:10][0:10]
>
> Sure, but it's not more obfuscated than a long line of map(lambda ...
> reduce(filter(map(lambda ... )))
I'm just commenting on the overloaded syntax of list construction and
truncation. No big deal.
> > And arguing from analogy, shouldn't
> >
> > range(0:bignum)[0:10:2] be [0:10:2]
>
> Yes, it should, but there is no way to enforce it, currently, because range
> can be shadowed by a local or global variable. And it doesn't have to be
> unintended, either. With range literals, that's no longer possible.
That's not what I mean. Ignore the range. My point is, if list
construction and truncation are going to be parallel, they should be
really parallel.
[0,1,2,3,4,5,6,7,8,10][0:5:2]==[0:5:2]
I don't understand "extended slicing" so I don't know why the former
doesn't work today.
> > You probably shouldn't be able to shadow most builtins period.
>
> Why not ? It would introduce a number of problems: adding new builtin
> functions would be as cagey as adding new reserved words (in effect, all
> builtins *become* reserved words.)
I said "most", not "all". Over time they could migrate from being
builtin to being non-overridable. No one should define a function (not
method, but function) called "map" or "dir". In practice, I haven't seen
such a thing. If we make a "tuples" function then for a year or two it
is fair game for overriding, the it becomes frozen.
> For that reason I think it's better to live with xrange() ;)
You could also use a lazy list comprehension (if we made list
comprehensions lazy):
[for x in [0:10:20]: x]
That would make people think twice about using xrange (as it
should...xrange isn't usually as efficient as they think!)
--
Paul Prescod - Not encumbered by corporate consensus
Simplicity does not precede complexity, but follows it.
- http://www.cs.yale.edu/~perlis-alan/quotes.html