Status of PEP's?

James_Althoff at i2.com James_Althoff at i2.com
Fri Mar 1 17:19:05 EST 2002


[Timothy Delaney]
> For the record (I've said this before), I like the idea of integers
> being iterable (and I'm not a set theory wonk).

[Alan Daniels]
> That's fine if you like the idea. I don't. The only validations
> I've seen for it are obscure references to set theory, or the vague
> notion that it looks neat since it would make Python read more like
> Haskell (or insert whatever favorite research langugage here). I have
> yet to see any meaningful explanation on how it fixes some gap in
> Python, or improves it other than saving the need to type the word
> "xrange".

The actual PEP has a "rationale" section.  Neither set theory nor Haskell
come into play in the rationale.  If you are happy with xrange when dealing
with the indices of indexed-collections, then you will not be swayed by the
rationale for PEP 276.  Not everyone has thought xrange to be ideal,
though.

> While I'm at it, two problems with it that I haven't yet seen
> addressed:
>
>  1) If you have a class that defines both __int__ and __getitem__
>     methods, and iterate over an instance of it, which method "wins"
>     comes iteration time? The usual, or the "for i in 5" trick?

PEP 276 doesn't propose any tricks.  It suggests adding an iterator to the
int class.  If you define your own class with an instance x, and do "for i
in x" the for-loop will try to get an iterator from your instance x -- just
because that's what the for-loop does. PEP 276 doesn't affect this behavior
in any way.


>     Maybe this is covered in PEP 276. I've read through it once when
>     it was first introduced and didn't see any mention on how this
>     would be handled. I'd read it through again, but it's late and
>     frankly reading it makes my skin crawl.

Don't worry, I have some ointment for you <wink>.  (Seriously though, is
that kind of comment really necessary?  I understand that you strongly
dislike the proposal.  But throwing in zingers isn't very considerate).


> 2) Anyone new to the language will wonder exactly why it is that they
>     can iterate over ints, strings, tuples, lists, dictionaries,
>     files, generators, and indeed, any class instance that implements
>     an iterable interface...
>
>     ...but not floats. Hey, if "for i in 5" means something, then
>     obviously "for i in 5.0" should mean something too, right? That's
>     what a newbie will think, and what good reason answer will anyone
>     be able to give them?

Play with some code and see if you can come up with a meaningful, useful,
practical, and reasonable-to-implement definition for a sequence of numbers
related to a given floating point number x.  I suspect that you will find a
lot of tricky issues.

> As I've come to think of it, the whole point of
> "iterating" is that the programmer is walking through a collection:

Others clearly agree with this perspective.  I think that it is
overly-restrictive to say that the *only* thing that you can iterate is a
collection.

> I can NEVER bring myself to see an integer as a collection,
> not outside of a lecture on number theory, anyway.

There's no requirement to think about number theory or to view integers as
collections here.  All that is suggested is a slightly-less cluttered (than
current) way to iterate the indices of an indexed-collection.  If you are
happy with range/xrange, so be it.

> Sorry to rant, but this is the only idea for Python I've seen
> in a VERY long time, since the 1.5.2 days, where rather than
> capturing my interest and giving me something to contemplate, just
> strikes me as ugly, and stays ugly no matter how long I look at it.

Well then, I guess you'll be giving PEP 276 high marks for "originality"
<wink>.

Jim





More information about the Python-list mailing list