[Python-Dev] Re: Sets: elt in dict, lst.include
Moshe Zadka
moshez@zadka.site.co.il
Wed, 31 Jan 2001 08:30:07 +0200 (IST)
On Tue, 30 Jan 2001 19:49:24 -0500, Guido van Rossum <guido@digicool.com> wrote:
> There are different ways to do interators.
>
> Here is a very "tame" proposal (and definitely in the realm of 2.2),
> that doesn't require any coroutine-like tricks. Let's propose that
>
> for var in expr:
> ...do something with var...
>
> will henceforth be translated into
>
> __iter = iterator(expr)
> while __iter.more():
> var = __iter.next()
> ...do something with var...
I'm +1 on that...but Tim's "try to use that to write something that
will return the nodes of a binary tree" still haunts me.
Personally, though, I'd thin down the interface to
while 1:
try:
var = __iter.next()
except NoMoreError:
break # pseudo-break?
With the usual caveat that this is a lie as far as "else" is concerned
(IOW, pseudo-break gets into the else)
> Then a new built-in function iterator() is needed that creates an
> iterator object. It should try two things:
>
> (1) If the object implements __iterator__() (or a C API equivalent),
> call that and be done; this way arbitrary iterators can be
> created.
> (2) If the object smells like a sequence (how to test???), use an
> iterator sort of like this:
Why not, "if the object doesn't have __iterator__, try this. If it
won't work, we'll find out by the exception that will be thrown in
our face".
class Iterator:
def __init__(self, seq):
self.seq = seq
self.index = 0
def next(self):
try:
try:
return self.seq[self.index] # <- smells like
except IndexError:
raise NoMoreError(self.index)
finally:
self.index += 1
> (I don't necessarily mean that all those instance variables should
> be publicly available.)
But what about your poor brother? <wink> Er....I mean, this would make
implementing "indexing" really about just getting the index from the
iterator.
> If the argument to iterator() is itself an iterator (how to test???),
No idea, and this looks problematic. I see your point -- but it's
still problematic.
--
Moshe Zadka <sig@zadka.site.co.il>
This is a signature anti-virus.
Please stop the spread of signature viruses!
Fingerprint: 4BD1 7705 EEC0 260A 7F21 4817 C7FC A636 46D0 1BD6