[Python-Dev] Lukewarm about range literals (original) (raw)
Tim Peters tim_one@email.msn.com
Mon, 28 Aug 2000 21:51:33 -0400
- Previous message: [Python-Dev] Lukewarm about range literals
- Next message: [Python-Dev] Lukewarm about range literals
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Just brain-dumping here:
Thomas did an excellent job on the patch! It's clean & crisp and, I think, bulletproof. Just want that to be clear.
As the reviewer, I spent about 2 hours playing with it, trying it out in my code. And I simply liked it less the more I used it; e.g.,
for i in [:len(a)]: a[i] += 1
struck me as clumsier and uglier than
for i in range(len(a)): a[i] += 1
at once-- which I expected due to the novelty --but didn't grow on me at all. Which is saying something, since I'm the world's longest-standing fan of "for i indexing a" ; i.e., I'm no fan of the range(len(...)) business, and this seems even worse. Despite that I should know 100x better at all levels, I kept finding myself trying to write stuff like
for i in [:a]: # or [len(a)] a couple times, even [a:] once a[i] += 1
Charles likes slices. Me too! I love them. But as a standalone notation (i.e., not as a subscript), part of the glory of slicing breaks down: for the list a, a[:] makes good sense, but when iterating over a, it's suddenly [:len(a)] because there's no context to supply a correct upper bound.
For 2.0, the question is solely yes-or-no on this specific notation. If it goes in, it will never go away. I was +0 at first, at best -0 now. It does nothing for me I can't do just as easily-- and I think more clearly --with range. The kinds of "extensions"/variations mentioned in the PEP make me shiver, too.
Post 2.0, who knows. I'm not convinced Python actually needs another arithmetic-progression list notation. If it does, I've always been fond of Haskell's range literals (but note that they include the endpoint):
Prelude> [1..10] [1,2,3,4,5,6,7,8,9,10] Prelude> [1, 3 .. 10] [1,3,5,7,9] Prelude> [10, 9 .. 1] [10,9,8,7,6,5,4,3,2,1] Prelude> [10, 7 .. -5] [10,7,4,1,-2,-5] Prelude>
Of course Haskell is profoundly lazy too, so "infinite" literals are just as normal there:
Prelude> take 5 [1, 100 ..] [1,100,199,298,397] Prelude> take 5 [3, 2 ..] [3,2,1,0,-1]
It's often easier to just list the first two terms than to figure out the last term and name the stride. I like notations that let me chuckle "hey, you're the computer, you figure out the silly details" .
- Previous message: [Python-Dev] Lukewarm about range literals
- Next message: [Python-Dev] Lukewarm about range literals
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]